gpt4 book ai didi

python - 使用 Keras 预训练 CNN 微调。如何卡住批归一化?

转载 作者:行者123 更新时间:2023-12-04 04:09:30 26 4
gpt4 key购买 nike

所以我没有在 tf.keras 中编写代码 并根据本教程使用预训练神经网络进行微调:https://keras.io/guides/transfer_learning/#freezing-layers-understanding-the-trainable-attribute ,

我必须设置参数 training=False 在调用预训练模型时,这样当我稍后解冻进行微调时,批量归一化不会破坏我的模型。但是我如何在 keras 中做到这一点(记住:我没有在 tf.keras 中写它)。在 keras 中甚至有必要这样做吗?

代码:

def baseline_model():
pretrained_model = Xception(include_top=False, weights="imagenet")

for layer in pretrained_model.layers:
layer.trainable = False

general_input = Input(shape=(256, 256, 3))

x = pretrained_model(general_input,training=False)
x = GlobalAveragePooling2D()(x)
...

在调用 model = baseline_model() 时给我错误:

TypeError: call() got an unexpected keyword argument 'training'

我怎样才能做到最好?我尝试重写 tf.keras 中的所有内容,但是当我尝试这样做时,到处都会出现错误...

编辑:我的 keras 版本是 2.3.1 和 tensorflow 2.2.0

最佳答案

在做了一些额外的研究后编辑了我之前的答案:
我做了一些阅读,似乎 BatchNorm 层在卡住时的行为方式有些诡计。这是一个讨论它的好线程:github.com/keras-team/keras/issues/7085 似乎 training=false 参数是正确卡住 BatchNorm 层所必需的,它已添加到 Keras 2.1 中。 3,所以我给你的建议是确保你的Keras/TF版本更高

关于python - 使用 Keras 预训练 CNN 微调。如何卡住批归一化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61998410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com