如何解决KeyError:'瓦尔_mean_absolute_error' Keras 2.3.1和TensorFlow 2.0来自Chollet Python深度学习

xiozqbni  于 2023-06-30  发布在  Python
关注(0)|答案(5)|浏览(203)

我正在读Chollet的书Deep Learning with Python的第3.7节。该项目是要找出20世纪70年代波士顿郊区房屋的中间价格。
https://github.com/fchollet/deep-learning-with-python-notebooks/blob/master/3.7-predicting-house-prices.ipynb
在“使用K折验证验证我们的方法”一节中,我尝试运行以下代码块:

num_epochs = 500
all_mae_histories = []
for i in range(k):
    print('processing fold #', i)
    # Prepare the validation data: data from partition # k
    val_data = train_data[i * num_val_samples: (i + 1) * num_val_samples]
    val_targets = train_targets[i * num_val_samples: (i + 1) * num_val_samples]

    # Prepare the training data: data from all other partitions
    partial_train_data = np.concatenate(
        [train_data[:i * num_val_samples],
         train_data[(i + 1) * num_val_samples:]],
        axis=0)
    partial_train_targets = np.concatenate(
        [train_targets[:i * num_val_samples],
         train_targets[(i + 1) * num_val_samples:]],
        axis=0)

    # Build the Keras model (already compiled)
    model = build_model()
    # Train the model (in silent mode, verbose=0)
    history = model.fit(partial_train_data, partial_train_targets,
                        validation_data=(val_data, val_targets),
                        epochs=num_epochs, batch_size=1, verbose=0)
    mae_history = history.history['val_mean_absolute_error']
    all_mae_histories.append(mae_history)

我得到一个错误KeyError:'瓦尔_mean_absolute_error'

mae_history = history.history['val_mean_absolute_error']

我猜解决方案是找出正确的参数来替换瓦尔_mean_absolute_error。我试着查看一些Keras文档,以确定正确的键值。有谁知道正确的key值?

nukf8bse

nukf8bse1#

代码中的问题是,当您编译模型时,您没有添加特定的“mae”指标。
如果你想在代码中添加' mae '指标,你需要这样做:

  1. model.compile('sgd', metrics=[tf.keras.metrics.MeanAbsoluteError()])
  2. model.compile('sgd', metrics=['mean_absolute_error'])
    在此步骤之后,您可以尝试查看正确的名称是否为val_mean_absolute_errorval_mae。最有可能的是,如果您像我在选项2中演示的那样编译模型,您的代码将使用“val_mean_absolute_error”。
    此外,您还应该将代码片段放在编译模型的位置,它在上面的问题文本中缺失(即build_model()函数)
0yg35tkg

0yg35tkg2#

我用'val_mae'替换了' val_mean_absolute_error',它对我很有效

bcs8qyzn

bcs8qyzn3#

仅供参考,我遇到了同样的问题,即使在改变了history.history['val_mae']行后,这个问题仍然存在。
在我的例子中,为了让瓦尔_mae dict对象出现在history.history对象中,我需要确保model.fit()代码包含'validation_data =(val_data,val_targets)'参数。我一开始就忽略了这一点。

cwxwcias

cwxwcias4#

我通过下面的代码行更新它:

mae_history = history.history["mae"]
wz8daaqr

wz8daaqr5#

历史对象应包含与编译对象相同的名称。例如:
mean_absolute_error给出val_mean_absolute_error
mae给出val_mae
accuracy给出val_accuracy
acc给出val_acc

相关问题