MLP中实现dropout,批标准化

MLP中实现dropout,批标准化,第1张

标准化是添加在激活函数之前,使用标准化的方式将输入处理到一个区域内或者近似平均的分布在一个区域内

在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了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11333117.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存