我正在使用 Keras (VGG16) 微调卷积网络模型,并且正在使用它。
要冻结除最后 3 层之外的所有图层,我将解冻所有图层,然后再次冻结除最后 3 层之外的所有图层。
conv_base.trainable = True
for layer in conv_base.layers[:-4]:
layer.trainable = False
这可以正确完成工作。
如果我使用相反的逻辑,即仅冻结最后三层而不接触其他层,则它不起作用!
for layer in conv_base.layers[-3:]:
layer.trainable = True
谁能解释一下这个技巧?
最好
我没看出有什么区别。
import tensorflow as tf
conv_base = tf.keras.applications.vgg16.VGG16(weights=None)
conv_base.trainable = True
for layer in conv_base.layers[:-4]:
layer.trainable = False
for layer in conv_base.layers:
print(int(layer.trainable), end='')
print()
conv_base.trainable = False
for layer in conv_base.layers[-4:]:
layer.trainable = True
for layer in conv_base.layers:
print(int(layer.trainable), end='')
结果:
00000000000000000001111
00000000000000000001111