gpt4 book ai didi

keras - model.trainable =模型下的卡住权重不正确?

转载 作者:行者123 更新时间:2023-12-03 12:18:02 26 4
gpt4 key购买 nike

我试图卡住免费训练的VGG16的图层(下面为“conv_base”),并在其之上添加新图层以进行特征提取。
我希望从'conv_base'的模型拟合之前(ret1)/之后(ret2)获得相同的预测结果,但事实并非如此。
这是检查体重卡住的错误方法吗?
加载VGG16并设置为不可训练

conv_base  = applications.VGG16(weights='imagenet', include_top=False, input_shape=[150, 150, 3]) 
conv_base.trainable = False
模型拟合前的结果
ret1 = conv_base.predict(np.ones([1, 150, 150, 3]))
在VGG16之上添加层并编译模型
model = models.Sequential()
model .add(conv_base)
model .add(layers.Flatten())
model .add(layers.Dense(10, activation='relu'))
model .add(layers.Dense(1, activation='sigmoid'))
m.compile('rmsprop', 'binary_crossentropy', ['accuracy'])
拟合模型
m.fit_generator(train_generator, 100, validation_data=validation_generator, validation_steps=50)
模型拟合后的结果
ret2 = conv_base.predict(np.ones([1, 150, 150, 3]))
希望这是真的,但事实并非如此。
np.equal(ret1, ret2)

最佳答案

这是一个有趣的案例。为什么发生这种情况是由以下原因引起的:

编译后无法卡住整个模型,如果未编译,则不会卡住

如果设置标志model.trainable=False,则在编译keras时会将所有图层设置为不可训练。如果在编译后设置此标志-则它根本不会影响您的模型。相同-如果在编译之前设置此标志,然后将模型的一部分重用于编译另一个模型-则不会影响您的重用层。因此,model.trainable=False仅在按以下顺序应用时才有效:

# model definition
model.trainable = False
model.compile()

在任何其他情况下,它都无法按预期工作。

关于keras - model.trainable =模型下的卡住权重不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47204116/

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