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

查看:2504
本文介绍了在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问题: 1 2
  • 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).

不幸的是,打印自定义指标不会显示其内容(除非您使用的是渴望"模式,并且您已使用数据计算了模型的每个步骤).
例如,您可以使用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也会自动找到为该度量输出单个标量的方法. (不知道要执行什么操作,但是很可能在表下隐藏了<​​c25> -返回整个批次很有趣,因此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天全站免登陆