【问题标题】:KeyError: 'Failed to format this callback filepath: "skintype_64_rmsprop_{val_loss:.3f}.h5". Reason: \'val_loss\''KeyError:'未能格式化此回调文件路径:“skintype_64_rmsprop_{val_loss:.3f}.h5”。原因:\'val_loss\''
【发布时间】:2020-10-27 00:26:36
【问题描述】:

我一直在尝试训练我的皮肤类型分类模型,但它显示错误。

model_name = f"skintype_{batch_size}_{optimizer}"
tensorboard = tf.keras.callbacks.TensorBoard(log_dir=os.path.join("logs", model_name))
# saves model checkpoint whenever we reach better weights
modelcheckpoint = tf.keras.callbacks.ModelCheckpoint(model_name + "_{val_loss:.3f}.h5", save_best_only=True, verbose=1)

history = m.fit(train_ds, validation_data=valid_ds, 
                steps_per_epoch=n_training_samples // batch_size, 
                validation_steps=n_validation_samples // batch_size, verbose=1, epochs=30,
                callbacks=[tensorboard, modelcheckpoint])

【问题讨论】:

    标签: python artificial-intelligence classification


    【解决方案1】:

    我对 Keras 一无所知,我只是简单地看了一下你的代码,但我想我明白了哪里出了问题。行内:

    modelcheckpoint = tf.keras.callbacks.ModelCheckpoint(model_name + "_{val_loss:.3f}.h5", save_best_only=True, verbose=1)
    

    Keras 抱怨 val_loss。我敢打赌,您希望包含该引用 ("_{val_loss:.3f}.h5") 的格式字符串在其前面有一个 f,以便在将引用传递到 ModelCheckpoint 之前,该引用被解释并替换为一个值。我认为您只需添加一个字符即可克服这个障碍:

    modelcheckpoint = tf.keras.callbacks.ModelCheckpoint(model_name + f"_{val_loss:.3f}.h5", save_best_only=True, verbose=1)
    

    我希望我是对的,并且希望这些知识能让你再次巡航。

    【讨论】:

    • 谢谢你的回答我试过了仍然显示同样的错误:(
    • 我不明白这怎么可能。我的意思是,它仍然可以被破坏,但添加 f 应该至少会改变一点行为。您的意思是在将字符串传递给ModelCheckpoint 之前计算该字符串,对吗?如果您运行的 Python 不知道 f,那么您应该会收到一条错误消息。如果val_loss 没有定义,你会得到一个错误。否则,该字符串应该更改为_3.00.h5。我不明白它怎么可能是完全相同的错误。可能只是类似的错误吗?
    • 我修好了非常感谢你的帮助:)
    【解决方案2】:

    您在 model.compile() 中提到的指标也可能存在问题。

    例如,我的 ModelCheckpoint 是这样的

    path = "ops/model-{epoch:02d}-{val_categorical_accuracy:.2f}.hdf5"
    checkpoint = ModelCheckpoint(filepath = path ,monitor ='val_categorical_accuracy',save_best_only=True,save_weights_only=True,mode='max',shuffle=True,verbose = 1,save_freq='epoch')
    

    我的 model.compile() 看起来像这样:

    model.compile(loss='binary_crossentropy',optimizer='adam',metrics=[tf.keras.metrics.CategoricalAccuracy()])
    

    keras 出现 val_loss 问题的原因很可能是您在编译时没有正确提及指标。

    【讨论】:

      猜你喜欢
      • 2021-10-09
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 2018-08-08
      • 2018-05-08
      • 1970-01-01
      相关资源
      最近更新 更多