目录
8.1 Deep Neural Networks-nn.ModuleList()
8.2 Neural Network Initialization Weights
8.3 Gradient Descent with Momentum
2.什么是动量momentum,动量如何解决陷入陷入局部最小值点问题
2.pytorch实现batch normalization
8.1 Deep Neural Networks-nn.ModuleList()
图8.1 用nn.ModuleList()+Layers数组方式快速简洁搭建DNN
8.2 Dropout
Dropout是一种提高深度神经网络性能的手段,用来防止过拟合。
-
dropout
-
pytorch实现dropout
1.dropout
在实际调参过程中当隐层数量过多或者隐层单元数量过多都会导致过拟合现象,需要组合不同数量的隐层单元数和隐层数是很麻烦的,一种常用的做法是实现一个复杂的模型,对模型使用一种正则化手段——dropout.
Dropout分两个阶段,在训练时使用dropout,测试时关闭dropout.
Dopout的实现方法是将激活函数乘以一个伯努利分布随机数r(比努力分布是离散概率分布,随机变量r以概率p取值为0,以概率(1-p)取值为1)P越大,关闭的神经元越多。每次迭代关闭哪个神经元都是随机的,一般来说网络中神经元数量越多,p值应该越大
图8.2-1 dropout实例图8.2-2 pytorch为了让每个单元被激活的概率为(1-p),将每个激活值除以(1-p)
图8.2-2 pytorch为了让每个单元被激活的概率为(1-p),将每个激活值除以(1-p)
图8.2-3 更多隐单元的层应该有更大的p值,反之更小
再次声明:只有训练的时候需要dropout,测试时不需要dropout
图8.2-4 使用/不适用dropout的训练-测试误差
蓝黄两线是不适用dropout的训练-测试误差,可以看到训练误差一直减小,测试误差反而上升,这表明模型在拟合噪声;而绿红二线是使用dropout之后的训练*测试误差,可以看到此时并没有出现过拟合现象。
图8.2-5 dropout的pytorch实现,relu先激活再drop或者先drop再激活的结果一样