pytorch神经网络及训练(一)

pytorch神经网络及训练(一)

随机梯度下降算法

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

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

实际效果(Practical Motivation)
在这里插入图片描述

pytorch中的优化器

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

算法名称
torch.optim.AdamAdam算法
torch.optim.SGDSGD算法
torch.optim.RMSpropRMSprop算法

以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)

在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序小旭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值