我使用预训练模型(EfficientNetB0)训练了 CNN,并使用我的数据对其进行了改进。(不要混淆,我是使用 TPU VM 进行的,不使用它时会出现同样的错误)这就是我所做的……
我使用预先训练的模型(EfficientNetB0)训练了 CNN,并使用我的数据对其进行了改进。(不要混淆,我是使用 TPU VM 进行的,不使用它时也会出现同样的错误)
我是这样做的:
`with strategy.scope():
base_model = EfficientNetB0(include_top=False, input_shape=(224, 224, 3), weights='imagenet')
base_model.trainable = False
model = Sequential([
base_model,
GlobalAveragePooling2D(),
Dense(64, activation='relu'),
Dropout(0.5),
Dense(2, activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
steps_per_epoch = len(train_data) // 32
validation_steps = len(val_data) // 32
history = model.fit(
train_dataset,
steps_per_epoch=steps_per_epoch,
validation_data=val_dataset,
validation_steps=validation_steps,
epochs=1
)`
现在有趣的是,该模型使用 val_loss, val_acc = model.evaluate(val_dataset, steps=validation_steps)
在同一个笔记本中使用该模型是可行的!
predictions = model.predict(prepared_image)
predicted_class = np.argmax(predictions, axis=1)
现在不起作用的关键部分是:
model.save('/kaggle/working/my_model.keras')
从技术上讲,这样做也是可行的,但是在加载模型时:
model = tf.keras.models.load_model(model_path)
我立即收到此错误:
ValueError: Layer "dense" expects 1 input(s), but it received 2 input tensors. Inputs
received: [<KerasTensor shape=(None, 7, 7, 1280), dtype=float32, sparse=False,
name=keras_tensor_504>, <KerasTensor shape=(None, 7, 7, 1280), dtype=float32,
sparse=False, name=keras_tensor_505>]
只是加载模型,没有其他的。是的,使用 kaggle 的模型上传然后复制路径,路径都是正确的。
我怎么 不能加载模型呢 ,即使 我可以在训练它进行预测的笔记本中使用它 。