tensorflow - 在 Keras 中创建自定义指标时 y_true 和 y_pred 是什么?

标签 tensorflow keras

我想在 Keras 中实现我的自定义指标。根据文档,我的自定义指标应定义为一个函数,该函数接受两个张量 y_pred 和 y_true 作为输入,并返回单个张量值。

但是,当优化运行时,我对这些张量 y_predy_true 中到底包含什么内容感到困惑。它只是一个数据点吗?是整批的吗?整个时代(可能不是)?有没有办法获得这些张量的形状?

有人可以指出一个值得信赖的地方,我可以在其中获取此信息吗?任何帮助,将不胜感激。不确定是否相关,但我正在使用 TensorFlow 后端。

<小时/>

为了回答这个问题,我到目前为止尝试过的事情:

  • 检查 Keras metrics documentation (没有解释这些张量是什么)。
  • 检查 source code for the Keras metrics并尝试通过查看其他指标的 Keras 实现来理解这些张量(这似乎表明 y_true 和 y_pred 具有整个批处理的标签,但我不确定)。
  • 阅读这些 stackoverflow 问题:1 , 2 , 3 ,以及其他人(没有人回答我的问题,大多数都集中在OP没有清楚地理解张量和 session 期间使用该张量计算的值之间的差异)。
  • 在优化期间通过定义如下指标来打印 y_truey_pred 的值:
    def test_metric(y_true, y_pred):
        y_true = K.print_tensor(y_true)
        y_pred = K.print_tensor(y_pred)
        return y_true - y_pred

(不幸的是,这些在优化过程中不会打印任何内容)。

最佳答案

y_true 和 y_pred

张量 y_true 是您传递给 fit 方法的真实数据(或目标、基本事实)。
它是将 numpy 数组 y_train 转换为张量。

张量y_pred是模型预测(计算、输出)的数据。

通常,y_truey_pred 具有完全相同的形状。一些损失,例如稀疏损失,可能会接受不同形状的损失。

<小时/>

y_true的形状

它包含整个批处理。它的第一个维度始终是批处理大小,并且它必须存在,即使批处理只有一个元素。

查找 y_true 形状的两种非常简单的方法是:

  • 检查您的真实/目标数据:print(Y_train.shape)
  • 检查您的model.summary()并查看最后的输出

但它的第一个维度将是批量大小。

因此,如果最后一层输出 (None, 1),则 y_true 的形状为 (batch, 1)。如果最后一层输出 (None, 200,200, 3),则 y_true 将是 (batch, 200,200,3)

<小时/>

自定义指标和损失函数

不幸的是,打印自定义指标不会显示其内容(除非您正在使用 eager 模式,并且您已经使用数据计算了模型的每一步)。
例如,您可以使用 print(K.int_shape(y_pred)) 查看它们的形状。

请记住,这些库首先“编译图形”,然后“使用数据运行它”。当您定义损失时,您就处于编译阶段,并且请求数据需要模型运行。

但即使您的指标结果是多维的,keras 也会自动找到方法来输出该指标的单个标量。 (不确定是什么操作,但很可能是隐藏在表格下的 K.mean() - 返回整个批处理很有趣,因此 Keras 应用了其他操作,例如样本权重) .

来源。当你习惯了 keras 后,通过简单地阅读这一部分,这种理解就会变得自然:

y_true: True labels. Theano/TensorFlow tensor.
y_pred: Predictions. Theano/TensorFlow tensor of the same shape as y_true.

真实标签意味着真实/目标数据。标签在这里是一个错误选择的词,它只是分类模型中真正的“标签”。
预测意味着模型的结果。

关于tensorflow - 在 Keras 中创建自定义指标时 y_true 和 y_pred 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46663013/

相关文章:

python - Keras 不使用自定义损失中的导数进行训练

python - 神经网络在一个时代后变平

python - ValueError at/image/Tensor Tensor ("activation_5/Softmax:0", shape=(?, 4), dtype=float32) 不是这个图的元素

python - 为什么神经网络在自己的训练数据上预测错误?

python - 警告 :tensorflow:Model was constructed with shape (None, ....)

machine-learning - TensorFlow 网站中衰减学习率的示例实际上会衰减学习率吗?

python - 如何使用 mmconvert 将 tensorflow 模型(InceptionResnetV2 pb 文件)转换为 pytorch 模型?

python - 改变批量大小的 Tensorflow 数据集计算训练期间的测试损失

python - tensorflow "op"有什么作用?

python - 使用 Keras fit_generator 时如何规范化数据