pytorch神经网络及训练(一)

pytorch神经网络及训练(一)

随机梯度下降算法

随机梯度下降算法(SGD)是对梯度下降算法的一种改进。

直观上SG的方法可能效率上更优。考虑这样一个情况,我们的训练数据集合 是由小的数据 集合复制10份得到的。此时,对样本做batch训练,是对样本 做batch训练计算复杂度的10倍,效果却是一样的。与之相对,SGD的方法在 中随机抽取样本的概率和在中的概率是相同的。在实际上虽然没有这种,样本完全是复制的情况,但是真实的样本却是经常有大量冗余的情况,此时SGD的效率更高。

实际效果(Practical Motivation)
pytorch神经网络及训练(一)_第1张图片

pytorch中的优化器

在pytorch中的optim模块,提供了多种可以直接使用的深度学习的优化器,包括了Adam、SGD、RMSprop等可以直接进行调用

算法名称
torch.optim.Adam Adam算法
torch.optim.SGD SGD算法
torch.optim.RMSprop RMSprop算法

以Adam算法为例介绍优化器中参数的使用情况

torch.optim.Adam(params,lr=0.001,betas(0.9,0.999),eps=le-08,weight_decay=0)

参数说明如下

  • param:待优化的iterable或定义了参数的dict
  • lr:算法学习率
  • betas:用于计梯度和梯度平方的系数
  • eps:增加数值稳定性的项
  • weight_decay权重衰减

pytorch中的损失函数

深度学习的优化算法可以直接作用的对象是损失函数,损失函数就是用来表示预测与实际数据之间的差异程度

pytorch中的nn模块提供了多种可以之间使用的深度学习损失函数——常用的有均方误差损失和交叉熵误差损失

pytorch中常见的损失函数(部分)

算法名称 适用问题类型
torch.nn.L1Loss 平均绝对值误差损失 回归
torch.nn.MSELoss 均方误差损失 回归
torch.nn.CrossEntropyLoss 交叉熵误差损失 多分类

交叉熵损失
在这里插入图片描述

过拟合与防止过拟合

过拟合的简单概念:深度学习模型,在训练数据集上能够获得很高的识别精度(针对分类)或者很低的均方误差(针对回归)但是把训练模型应用到测试集时结果不是很理想

防止过拟合的几种简单方法

  1. 增加数据量
  2. 合理的数据切分
  3. 正则化方法
  4. Dropout
  5. 提前结束训练

网络参数初始化

nn模块下面的init模块下有常用的参数初始化类,包括了均匀分布和正态分布等

参数初始化方法应用示例:

conv1.weight可以获取conv1卷积层的初始化权重参数,torch.manual_seed(12)定义随机数初始化,便于torch.nn.init.normal()生成的随机数重复使用

  • conv1.weight:表示随机数用来替换张量的原始数据
  • mean=0 表示均值为0
  • std=1 表示标准差为1
conv1 = torch.nn.Conv2d(3,16,3)
torch.manual_seed(12)
torch.nn.init.normal_(conv1.weight,mean=0,std=1)

plt.figure(figsize=(8,6))
plt.hist(conv1.weight.data.numpy().reshape((-1,1)),bins= 30)

pytorch神经网络及训练(一)_第2张图片

pytorch神经网络及训练(一)_第3张图片

你可能感兴趣的:(人工智能算法,pytorch,神经网络,深度学习)