如何在Flux.jl构建的模型中添加Batch Normalization层
解决方案
你使用的是Flux.jl神经网络套件,直接调用内置的BatchNorm层插入模型结构即可,所有归一化参数会由框架自动维护、更新,不需要你手动计算提供。
通常批归一化层会放在全连接层之后、激活函数之前使用,你可以直接按如下方式修改模型:
using Flux m = Chain( Dense(28^2, 64), BatchNorm(64, relu), # BN层传入对应输出维度,可直接指定激活函数 Dense(64, 10), BatchNorm(10), # 输出层前也可按需选择是否加BN softmax )
如果你不需要在BN层绑定激活函数,也可以拆分开写,效果完全一致:
m = Chain( Dense(28^2, 64), BatchNorm(64), relu, Dense(64, 10), BatchNorm(10), softmax )
- 注意:训练阶段
BatchNorm会自动启用批统计计算,推理阶段调用Flux.testmode!(m)即可切换到全局固定统计量模式,无需手动切换参数。 - 如果你不需要对输出层做归一化,直接去掉第二层
BatchNorm(10)即可,不影响整体结构运行。
内容的提问来源于stack exchange,提问作者logankilpatrick
相关产品推荐
相关产品推荐

