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

JLa*_*ana 22 keras tensorflow

我想在Keras中实现我的自定义指标.根据该文件,我的自定义指标应被定义为需要作为输入的两个张量,函数y_predy_true,并返回一个值张.

但是,我对这些张量中确切包含的内容y_pred以及y_true优化运行时的内容感到困惑.它只是一个数据点吗?这是整批吗?整个时代(可能不是)?有没有办法获得这些张量的形状?

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


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

  • 检查Keras指标文档(没有解释这些张量是什么).
  • 检查Keras指标源代码,并通过查看其他指标的Keras实现来尝试理解这些张量(这似乎表明y_true并且y_pred有整个批次的标签,但我不确定).
  • 读这些计算器的问题:1,2,3,和其他(没有回答我的问题,大部分都集中在OP没有明确认识的张量,并使用会话期间张量计算出的值之间的差).
  • 打印的值y_true,并y_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
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ler 26

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).


自定义指标和损失函数

不幸的是,打印自定义指标不会显示其内容.例如,你可以看到它们的形状print(K.int_shape(y_pred)).

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

但即使您的度量标准的结果是多维的,keras也会自动找到为该度量标准输出单个标量的方法.(不确定操作是什么,但很可能K.mean()隐藏在桌子下面).

源.在你习惯了keras之后,只需阅读这部分就可以理解这种理解:

y_true:真正的标签.Theano/TensorFlow张量.
y_pred:预测.与Y_true形状相同的Theano/TensorFlow张量.

真实标签表示真实/目标数据.标签在这里是一个选择严重的词,它只是分类模型中的"标签".
预测意味着您的模型的结果.