所以我没有用tf.keras编写我的代码,根据这篇预训练NN微调的教程: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。
layer.trainable = False
,它将冻结所述层中的所有权重,并且不再可训练。您可以通过运行model.summary()
以后检查它 - 它应该显示整个模型的可训练和不可训练参数数量。 - Karol Żaktraining=false
参数是在Keras 2.1.3中添加的,因此请确保您的Keras/TF版本是最新的。 - Karol Żak