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

我想在Keras中实现自定义指标。根据文档,我的自定义指标应定义为以两个张量y_predy_true作为输入并返回单个张量值的函数。

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

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


为了回答这个问题,我到目前为止已经尝试过:

  • 检查Keras度量文档 (没有关于这些张量的解释)。
  • 检查Keras度量源代码,并通过查看y_true其他度量实现来尝试理解这些张量(这似乎表明y_truey_pred具有整个批次的标签,但我不确定)。
  • 读这些计算器的问题: 123 ,和其他(没有回答我的问题,大部分都集中在OP没有明确认识的张量,并使用会话期间张量计算出的值之间的差)。
  • 通过定义如下度量标准,在优化过程中打印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

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

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

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模式,并且已使用data计算了模型的每个步骤)。
例如,您可以使用print(K.int_shape(y_pred))查看它们的形状。

请记住,这些库首先“编译图形”,然后“通过数据运行”。定义损失时,您就处于编译阶段,要求数据需要模型才能运行。

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

资料来源。在习惯了喀拉拉邦之后,只需阅读以下部分就可以自然地了解这种情况:

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

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号