在pytorch中,使用 torch.nn.BatchNorm1/2/3d() 函数表示一个批标准化层,使用方法与其它层类似
与不使用批标准化的网络(准确率93%左右)相比,使用批标准化的网络准确率由明显的提高
dropout是一种常见的防止过拟合的方法,通过将网络中的神经元随机的置0来达到防止过拟合的目的
pytorch中使用 torch.nn.Dropout() 和 torch.nn.Dropout2/3d() 函数构造,且该层只在训练中起作用,在预测时dropout将不会工作
可以看到,dropout对于系统性能的还是有比较大的影响的,对于这种微型网络来说,泛化能力的提升并不明显
当批标准化和dropout同时存在时,这两个层次的相互位置该如何考虑
比如你想写一个新Module叫ABC,那就写个文件叫ABC.lua,第一行local ABC, parent = torch.class('nn.ABC', 'nn.Module')如果ABC是Criterion的话则是
local ABC, parent = torch.class('nn.ABC', 'nn.Criterion')
然后把必须有的两个function
ABC:updateOutput
ABC:updateGradInput给写了,如果有参数的话还需要
ABC:accGradParameters
基本就行了。
如果需要CUDA的GPU运算的话,记得所有运算都调用tensor里定义的function。
想要深度优化的话就得自己写CUDA了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)