PyTorch —— 神经网络权重初始化
2019-05-16 10:07
776 查看
权重初始化
神经网络从错误中学习,但是错误要能够被定位到。如果不能定位到错误那么就无法改正。
对于神经网络中的参数来说,如果所有参数全部一样(比如初始化为全0),那么就面临一个问题:梯度往哪里下降是最快呢??
看一个例子
神经网络很难判断哪些权重需要更改,因为每个层级的神经元输出是一样的。为了避免神经元具有相同的输出,我们使用独特权重。我们还可以随机选择权重,避免每个周期后的损失都陷于局部最低点。
如果使用正态(normal)或者uniform(均匀),结果就会好得多。随机的权重是很重要的。
权重初始化函数(均匀):
def weights_init_uniform(m): classname = m.__class__.__name__ # for every Linear layer in a model.. if classname.find('Linear') != -1: # apply a uniform distribution to the weights and a bias=0 m.weight.data.uniform_(0.0, 1.0) m.bias.data.fill_(0)
应用方法:
model_uniform = Net() model_uniform.apply(weights_init_uniform)
以一般法则进行初始化的函数 。分布和使用一般法则初始化权重的模型;范围是−y,y-y,y−y,y其中 y=1/ny=1 / \sqrt{n}y=1/n
def weights_init_uniform_rule(m): classname = m.__class__.__name__ # for every Linear layer in a model.. if classname.find('Linear') != -1: # get the number of the inputs n = m.in_features y = 1.0/np.sqrt(n) m.weight.data.uniform_(-y, y) m.bias.data.fill_(0) # 4000 create a new model with these weights model_rule = Net() model_rule.apply(weights_init_uniform_rule)
利用正态进行初始化:
## complete this function def weights_init_normal(m): '''Takes in a module and initializes all linear layers with weight values taken from a normal distribution.''' classname = m.__class__.__name__ # for every Linear layer in a model # m.weight.data shoud be taken from a normal distribution # m.bias.data should be 0 if classname.find('Linear') != -1: m.weight.data.normal_(0.0, 0.05) m.bias.data.fill_(0)
利用helper来进行比较:
import helpers # put them in list form to compare ## evaluate the behavior using helpers.compare_init_weights model_list = [(model_2, 'No'), (model_normal_rule, 'Normal Distribution')] # evaluate behavior helpers.compare_init_weights(model_list, 'No vs Normal', train_loader, valid_loader)
结果显示正态有更低的训练误差。
和更高的验证精确度
相关文章推荐
- 神经网络架构PYTORCH-几个概念
- 深度学习--神经网络权重初始化
- 神经网络超参之权重初始化的方法
- PyTorch快速入门教程三(神经网络)
- 神经网络之权重初始化
- pytorch 6 build_nn_quickly 快速搭建神经网络
- 【deeplearning.ai】第二门课:提升深层神经网络——权重初始化
- 神经网络架构PYTORCH-初相识(3W)
- 初始化神经网络的权重和偏置
- PyTorch 入门实战(四)——利用Torch.nn构建卷积神经网络
- 斯坦福cs231n学习笔记(8)------神经网络训练细节(数据预处理、权重初始化)
- 神经网络优化(初始化权重)
- 神经网络架构PYTORCH-前馈神经网络
- 深度神经网络的权重初始化
- 神经网络权重初始化问题
- 利用pytorch 做一个简单的神经网络实现sklearn库中莺尾花的分类
- 神经网络的权重初始化
- 神经网络权重初始化问题
- 神经网络之权重初始化(附代码)
- 神经网络八:权重初始化