如何解决 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_error
mae
给出val_mae
accuracy
给出val_accuracy
acc
给出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‘)问题
如何解决 KeyError:u“[Index([..], dtype='object')] 中没有 [列]”
在 Pandas 中使用 groupby 函数时如何解决“keyerror”?
如何解决错误 KeyError: 'A secret key is required to use CSRF.'在烧瓶应用程序中使用 wtform 时?