如何解决 KeyError: 'val_mean_absolute_error' Keras 2.3.1 and TensorFlow 2.0 From Chollet Deep Learning w

Posted

技术标签:

【中文标题】如何解决 KeyError: \'val_mean_absolute_error\' Keras 2.3.1 and TensorFlow 2.0 From Chollet Deep Learning with Python【英文标题】:How to resolve KeyError: 'val_mean_absolute_error' Keras 2.3.1 and TensorFlow 2.0 From Chollet Deep Learning with Python如何解决 KeyError: 'val_mean_absolute_error' Keras 2.3.1 and TensorFlow 2.0 From Chollet Deep Learning with Python 【发布时间】:2020-05-20 01:18:18 【问题描述】:

我在 Chollet 的书 Deep Learning with Python 的第 3.7 节。 该项目旨在找出 1970 年代波士顿特定郊区的房屋中位价。

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: 'val_mean_absolute_error'

mae_history = history.history['val_mean_absolute_error']

我猜解决方案是找出正确的参数来替换 val_mean_absolute_error。我尝试查看一些 Keras 文档以了解正确的键值。有人知道正确的键值吗?

【问题讨论】:

【参考方案1】:

您的代码中的问题是,当您编译模型时,您没有添加特定的“mae”指标。

如果您想在代码中添加“mae”指标,您需要这样做:

    model.compile('sgd', metrics=[tf.keras.metrics.MeanAbsoluteError()]) model.compile('sgd', metrics=['mean_absolute_error'])

这一步之后,你可以试试看正确的名字是val_mean_absolute_error还是val_mae。很可能,如果您像我在选项 2 中演示的那样编译模型,您的代码将使用“val_mean_absolute_error”。

此外,您还应该将代码 sn-p 放在编译模型的位置,上面的问题文本中缺少它(即build_model() 函数)

【讨论】:

我将 'val_mean_absolute_error' 替换为 'val_mae' 并解决了,谢谢! 也尝试在 TensorFlow 中切换到 Keras :D【参考方案2】:

我用“val_mae”替换了“val_mean_absolute_error”,它对我有用

【讨论】:

【参考方案3】:

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

   mae_history = history.history["mae"]

【讨论】:

如果我理解正确,'mae' 条目在历史对象中,但这代表训练集的 mae,而不是原始问题要求的验证集。【参考方案4】:

仅供参考,即使按照答案中的描述更改了 history.history['val_mae'] 行,我也遇到了同样的问题。

在我的例子中,为了让 val_mae dict 对象出现在 history.history 对象中,我需要确保 model.fit() 代码包含“validation_data = (val_data, val_targets)”参数。我最初忽略了这样做。

【讨论】:

【参考方案5】:

History 对象应包含与您编译的名称相同的名称。 例如:mean_absolute_error 给出val_mean_absolute_errormae 给出val_maeaccuracy 给出val_accuracyacc 给出val_acc

【讨论】:

以上是关于如何解决 KeyError: 'val_mean_absolute_error' Keras 2.3.1 and TensorFlow 2.0 From Chollet Deep Learning w的主要内容,如果未能解决你的问题,请参考以下文章

解决:mode, rawmode = _fromarray_typemap[typekey]KeyError: ((1, 1, 9), ‘|u1‘)问题

python-如何解决KeyError:2?

(52)KeyError错误

如何解决 KeyError:u“[Index([..], dtype='object')] 中没有 [列]”

在 Pandas 中使用 groupby 函数时如何解决“keyerror”?

如何解决错误 KeyError: 'A secret key is required to use CSRF.'在烧瓶应用程序中使用 wtform 时?