在 Keras 中创建自定义指标时,y_true 和 y_pred 是什么? [英] What is y_true and y_pred when creating a custom metric in Keras?

查看:188
本文介绍了在 Keras 中创建自定义指标时,y_true 和 y_pred 是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to implement my custom metric in Keras. According to the documentation, my custom metric should be defined as a function that takes as input two tensors, y_pred and y_true, and returns a single tensor value.

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

However, I'm confused to what exactly will be contained in these tensors y_pred and y_true when the optimization is running. Is it just one data point? Is it the whole batch? The whole epoch (probably not)? Is there a way to obtain these tensors' shapes?

有人可以指出我可以获取这些信息的可靠地方吗?任何帮助,将不胜感激.不确定是否相关,但我使用的是 TensorFlow 后端.

Can someone point to a trustworthy place where I can get this information? Any help would be appreciated. Not sure if relevant, but I'm using TensorFlow backend.

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

Things I tried so far, in order to answer this:

  • 检查 Keras 指标文档(没有解释这些张量是什么).
  • 检查 Keras 指标的源代码 并尝试通过查看其他指标的 Keras 实现来了解这些张量(这似乎表明 y_truey_pred 具有整个批次的标签,但我不确定).
  • 阅读这些 stackoverflow 问题:123 和其他人(没有人回答我的问题,大多数都集中在 OP 上,没有清楚地理解张量与会话期间使用该张量计算的值之间的区别).
  • 在优化过程中打印 y_truey_pred 的值,通过定义如下指标:
  • Checking the Keras metrics documentation (no explanation there about what these tensors are).
  • Checking the source code for the Keras metrics and trying to understand these tensors by looking at the Keras implementation for other metrics (This seems to suggest that y_true and y_pred have the labels for an entire batch, but I'm not sure).
  • Reading these stackoverflow questions: 1, 2, 3, and others (none answer my question, most are centered on the OP not clearly understanding the difference between a tensor and the values computed using that tensor during the session).
  • Printing the values of y_true and y_pred during the optimization, by defining a metric like this:
    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

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

(unfortunately these don't print anything during the optimization).

推荐答案

y_true 和 y_pred

张量 y_true 是您传递给 fit 方法的真实数据(或目标、地面实况).
它是将 numpy 数组 y_train 转换为张量.

y_true and y_pred

The tensor y_true is the true data (or target, ground truth) you pass to the fit method.
It's a conversion of the numpy array y_train into a tensor.

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

The tensor y_pred is the data predicted (calculated, output) by your model.

通常,y_truey_pred 的形状完全相同.一些损失,例如稀疏的损失,可以接受不同形状的损失.

Usually, both y_true and y_pred have exactly the same shape. A few of the losses, such as the sparse ones, may accept them with different shapes.

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

It contains an entire batch. Its first dimension is always the batch size, and it must exist, even if the batch has only one element.

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

Two very easy ways to find the shape of y_true are:

  • 检查您的真实/目标数据:print(Y_train.shape)
  • 检查您的 model.summary() 并查看最后的输出
  • check your true/target data: print(Y_train.shape)
  • check your model.summary() and see the last output

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

But its first dimension will be the batch size.

所以,如果你的最后一层输出 (None, 1)y_true 的形状是 (batch, 1).如果最后一层输出 (None, 200,200, 3),则 y_true 将是 (batch, 200,200,3).

So, if your last layer outputs (None, 1), the shape of y_true is (batch, 1). If the last layer outputs (None, 200,200, 3), then y_true will be (batch, 200,200,3).

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

Unfotunately, printing custom metrics will not reveal their content (unless you are using eager mode on, and you have calculated every step of the model with data).
You can see their shapes with print(K.int_shape(y_pred)), for instance.

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

Remember that these libraries first "compile a graph", then later "runs it with data". When you define your loss, you're in the compile phase, and asking for data needs the model to run.

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

But even if the result of your metric is multidimensional, keras will automatically find ways to output a single scalar for that metric. (Not sure what is the operation, but very probably a K.mean() hidden under the table - it's interesting to return the entire batch, so Keras applies other operations such as sample weights, for instance).

来源.在你习惯了 keras 之后,简单地阅读这部分内容就会很自然地理解:

Sources. After you get used to keras, this understanding gets natural from simply reading this part:

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

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

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

True labels mean true/target data. Labels is a badly chosen word here, it is only really "labels" in classification models.
Predictions mean the results of your model.

这篇关于在 Keras 中创建自定义指标时,y_true 和 y_pred 是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆