NLP学习笔记_pytorch(基础,未完成)
深度学习
深度学习的概念
深度学习从广义上来讲就是程序可以自己学习自己的意思。是指一个已经写好的代码程序经过大量的数据使得自身得到了发展
总共有三个部分的特征:
一、反向传播算法
二、特征提取能力
三、端到端之间的学习方法
学习pytorch
这是一个深度学习的框架
中间有三个特点:
1、完全符合python编程(tensorflow就不行,是在python语法和TensorFlow自己有些格式之间转换)
2、方便的张量(tensor)计算 -->可以将变量加载到GPU(图形处理器)上
3、对动态计算图的支持 ---->动态计算图,是pytorch的特有特性,是可以用来表示反向传播算法的一种图示
![](https://cdn.jsdelivr.net/gh/thanyi/image/20210806235217.png)
使用pytorch进行深度学习的步骤
构建神经网络模型
neu = torch.nn.Sequential(
torch.nn.Linear(input_size,hidden_size), #输入层到隐含层之间的线性运算
torch.nn.Sigmoid(), #作用在对隐含层的每一个神经元
torch.nn.Linear(hidden_size,output_size), #从隐含层到输出层的线性运算
)
这个格式的参数输入可以将所有神经网络的参数储存在neu.parameters中
其中输入层的每一个神经元都是多维向量的一个维度
建立损失函数和优化器
损失函数
用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。
pytorch中的损失函数
cost = torch.nn.MSELoss()
torch.nn.MSELoss() <--------> torch.mean((y-y*)^2)
意识是预测值和真实值差的平方的平均值
cost是函数指针,指向这个mseloss函数
优化器
optimizer = torch.optim.SGD(neu.parameters(),lr=0.01)
neu.parameters是定义好的神经网络中的所有等待被优化的所有参数的集合
lr是学习效率参数
对神经网络进行分批次训练
一个简单的预测需要的步骤
数据预处理
类型变量:数值的大小没有特殊的含义。比如说预测当地此时具有的共享单车数的时候的"星期几"这个变量。与之相对的是–特征变量(特征属性,在一个表中的特征列)
预处理手段
一、对类型变量进行类型编码,比如one-hot编码
二、数据变量标准化(归一化),对数值变量进行统一化运算,使其更加方便运算。(比如对数据减去均值再除以方差)
三、分批训练,将其分类为训练集、测试集。还有将其切分成小批,一批一批地进入神经网络,每一批训练网络一次
关于分类相关的深度学习
例子:文本分类的问题
文本向量化
文本向量化是将一个不固定长度的文本变成一个固定长度的向量
所采用的技术就是词袋模型
词袋模型是指将一段文本的所有词视为一个装满文本的大袋子,忽略单词之间的顺序,只看频率,并且将这个大袋子中的单词全部变成向量,有多少个单词就是多少维的向量
举例:
我 爱 北京 天安门
每个 人 都有 一个 爱 的 人
那么我们对应的单词表就是
{我,爱,北京,天安门,每个,人,都有,一个,的}-----> 九维向量
我 爱 北京 天安门
{1/4,1/4,1/4,1/4,0,0,0,0,0} #向量表示
每个 人 都有 一个 爱 的 人
{0,1/7,0,0,1/7,2/7,1/7,1/7,1/7} #向量表示
构造分类器
model = nn.Sequential(
nn.Linear(input_size,hidden_size),
nn.ReLU(), #在计算的速度上更快,并且有利于梯度信息的传递,在一定程度上避免了梯度爆炸的问题
nn.Linear(hidden_size,2), #2是因为这个就是个分类,我们假设分成2类
nn.LogSoftmax(dim=), #用于解决分类问题的分类输出层计算
)
未完待续。。。