为了账号安全,请及时绑定邮箱和手机立即绑定

Keras 的 BatchNormalization 和 PyTorch 的 BatchNorm2d

Keras 的 BatchNormalization 和 PyTorch 的 BatchNorm2d

心有法竹 2022-07-19 10:35:24
我有一个在 Keras 和 PyTorch 中实现的示例微型 CNN。当我打印两个网络的摘要时,可训练参数的总数相同,但参数总数和批量标准化的参数数不匹配。这是 Keras 中的 CNN 实现:inputs = Input(shape = (64, 64, 1)). # Channel Last: (NHWC)model = Conv2D(filters=32, kernel_size=(3, 3), padding='SAME', activation='relu', input_shape=(IMG_SIZE, IMG_SIZE, 1))(inputs)model = BatchNormalization(momentum=0.15, axis=-1)(model)model = Flatten()(model)dense = Dense(100, activation = "relu")(model)head_root = Dense(10, activation = 'softmax')(dense)以上模型打印的摘要是:Model: "model_8"_________________________________________________________________Layer (type)                 Output Shape              Param #   =================================================================input_9 (InputLayer)         (None, 64, 64, 1)         0         _________________________________________________________________conv2d_10 (Conv2D)           (None, 64, 64, 32)        320       _________________________________________________________________batch_normalization_2 (Batch (None, 64, 64, 32)        128       _________________________________________________________________flatten_3 (Flatten)          (None, 131072)            0         _________________________________________________________________dense_11 (Dense)             (None, 100)               13107300  _________________________________________________________________dense_12 (Dense)             (None, 10)                1010      =================================================================Total params: 13,108,758Trainable params: 13,108,694Non-trainable params: 64_________________________________________________________________正如您在上面的结果中看到的,Keras 中的批量标准化比 PyTorch 具有更多的参数(准确地说是 2 倍)。那么上述 CNN 架构有什么区别呢?如果它们是等效的,那么我在这里缺少什么?
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

Keras 将许多将在层中“保存/加载”的东西视为参数(权重)。

虽然这两种实现都自然具有批次的累积“均值”和“方差”,但这些值无法通过反向传播进行训练。

然而,这些值每批都会更新,Keras 将它们视为不可训练的权重,而 PyTorch 只是将它们隐藏起来。这里的“不可训练”一词的意思是“不能通过反向传播训练”,但并不意味着这些值被冻结了。

总的来说,它们是BatchNormalization一层的 4 组“权重”。考虑到选定的轴(默认 = -1,层大小 = 32)

  • scale(32) - 可训练

  • offset(32) - 可训练

  • accumulated means(32) - 不可训练,但每批更新

  • accumulated std (32) - 不可训练,但每批更新

在 Keras 中这样做的好处是,当您保存图层时,您还可以保存均值和方差值,就像您自动保存图层中的所有其他权重一样。当你加载图层时,这些权重会一起加载。


查看完整回答
反对 回复 2022-07-19
  • 1 回答
  • 0 关注
  • 226 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号