tensorflow KeyError:'优化器无法识别变量dense_1/kernel:0,对于预训练的keras模型VGG 19

bvjxkvbb  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(1334)

我将使用以下代码加载一个imagenet预训练的VGG 19模型,并使其适合我的自定义数据集。

from keras.applications.vgg19 import VGG19

optim = tf.keras.optimizers.RMSprop(momentum=0.9)
vgg19 = VGG19(include_top=False, weights='imagenet', input_tensor=tf.keras.layers.Input(shape=(224, 224, 3)))
vgg19.trainable = False
# x = keras.layers.GlobalAveragePooling2D()(model_vgg19_pt.output)
x = keras.layers.Flatten()(vgg19.output)
output = keras.layers.Dense(n_classes, activation='softmax')(x)
model_vgg19_pt = keras.models.Model(inputs=[vgg19.input], outputs=[output])
model_vgg19_pt.compile(optimizer=optim,
                       loss='categorical_crossentropy', metrics=['categorical_accuracy'])
callback = tf.keras.callbacks.LearningRateScheduler(scheduler)
model_vgg19_pt.fit(x_train, y_train, batch_size=20,
                             epochs=50, callbacks=[callback]
                             )

在model.fit()行上,我收到以下错误
KeyError:"优化器无法识别变量dense_1/kernel:0。这通常意味着您正在尝试调用优化器以分别更新模型的不同部分。请在定型循环之前使用可定型变量的完整列表调用optimizer.build(variables),或使用旧优化器“tf.keras.optimizers.legacy.{self.class.name}”。“

这意味着什么,我该如何修复

我得到同样的错误

keras.applications.inception_v3

当使用相同的实现方法时也是如此。
另外,这是在tensorflow cpu上运行jupyter笔记本文件,但是当在安装了tensorflow-gpu的远程机器上运行时,我得到了这些错误。

**这适用于优化器SGD,但不适用于RMSprop。**为什么?
附加使用此:

model_vgg19_pt.compile(optimizer=tf.keras.optimizers.RMSprop(momentum=0.9),
                           loss='categorical_crossentropy', metrics=['categorical_accuracy'])

而不是像上面使用的那样工作。但是有没有人能解释一下为什么...。

wecizke3

wecizke31#

您安装了哪个版本的Tensorflow GPU?TensorFlow 2.10是在原生Windows上支持GPU的最新TensorFlow版本。请按照GPU支持的所有硬件/软件要求查看install TensorFlow的链接。
回调中的LearningRateScheduler参数未定义,您在模型编译时传递了该参数。
从www.example.com()中删除回调后,我能够训练模型model.fit。(此处附上gist以供参考)

相关问题