Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4428076
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: 网络与安全

2019-03-14 10:05:08


AlexNet将sigmoid激活函数改成了更加简单的ReLU激活函数。一方面,ReLU激活函数的计算更简单,例如它并没有sigmoid激活函数中的求幂运算。另一方面,ReLU激活函数在不同的参数初始化方法下使模型更容易训练。这是由于当sigmoid激活函数输出极接近0或1时,这些区域的梯度几乎为0,从而造成反向传播无法继续更新部分模型参数;而ReLU激活函数在正区间的梯度恒为1。因此,若模型参数初始化不当,sigmoid函数可能在正区间得到几乎为0的梯度,从而令模型无法得到有效训练。

全连接层,1.耗费内存,2.容易过拟合,需要dropout. 所以NiN 用kernel_size=1的卷积层替代,减少内存消耗,缓解过拟合。1x1卷积失去卷积层识别高宽上相邻元素构成模式的功能,有可能增加有效模型训练时间。

全局平均池化层对每个通道中所有元素求平均,全局平均池化层即窗口形状等于输入空间维形状的平均池化层. nn.GlobalAvgPool2D()

打印整个网络使用的参数数量 net.collect_params()

随机初始化参数:如果将每个隐藏单元的参数都初始化为相等的值,那么在正向传播时每个隐藏单元将根据相同的输入计算出相同的值,并传递至输出层。在反向传播中,每个隐藏单元的参数梯度值相等。因此,这些参数在使用基于梯度的优化算法迭代后值依然相等。之后的迭代也是如此。在这种情况下,无论隐藏单元有多少,隐藏层本质上只有1个隐藏单元在发挥作用。

训练内存占用:在模型参数初始化完成后,我们交替地进行正向传播和反向传播,并根据反向传播计算的梯度迭代模型参数。既然我们在反向传播中使用了正向传播中计算得到的中间变量来避免重复计算,那么这个复用也导致正向传播结束后不能立即释放中间变量内存。这也是训练要比预测占用更多内存的一个重要原因。另外需要指出的是,这些中间变量的个数大体上与网络层数线性相关,每个变量的大小跟批量大小和输入个数也是线性相关的,它们是导致较深的神经网络使用较大批量训练时更容易超内存的主要原因。

调参数:
先用一个hidden layer,找到合适的units
调整learning rate,大小一般从0.001,0.003…0.01,0.03…0.1,0.3,…1,3…
优化training loss到最低,有轻微过拟合,根据学习曲线可以调整epochs进行early stop。
调整weight decay到test loss约等于training loss.
不同hidden units对learning rate和weight_decay也会有很大不同,当改变数值较大时需要调调learning rate.


阅读(1260) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~