我想在Keras中实现自定义指标。根据文档,我的自定义指标应定义为一个函数,它将两个张量y_pred
和y_true
作为输入,并返回单个张量值。
但是,我很困惑在优化运行时这些张量y_pred
和y_true
中确切包含的内容。它只是一个数据点吗?这是整批吗?整个时代(可能不是)?有没有办法获得这些张量的形状?
有人可以指向值得信赖的地方,我可以获取此信息吗?任何帮助,将不胜感激。不确定是否相关,但我正在使用TensorFlow后端。
到目前为止我尝试过的事情,为了回答这个问题:
y_true
和y_pred
具有整批的标签,但我不确定。)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
(遗憾的是,这些在优化过程中不会打印任何内容)。
答案 0 :(得分:16)
张量y_true
是您传递给fit方法的真实数据(或目标,基础事实)。
它是将numpy数组y_train
转换为张量。
张量y_pred
是您的模型预测(计算,输出)的数据。
y_true
和y_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:预测。 Theano / TensorFlow张量与y_true形状相同。
真实标签表示真实/目标数据。标签在这里是一个选择不好的词,它只是分类模型中真正的“标签” 预测意味着您的模型的结果。
答案 1 :(得分:1)
{
"reason": "No data retrieved for GET call",
"response": "failure"
}
是真实值(标签)。并且y_true
是您的NN模型预测的值。
张量的大小(形状)受到批次大小(nb_batches)的影响。
答案 2 :(得分:0)
y_true是目标值,y_pred是模型的预测值。 函数中的参数位置也很重要。您可以仅通过实现一个示例来进行检查,也可以通过将该函数用作指标来进行观察。 注意:-在检查此属性时,请避免使用验证拆分,因为没有足够的示例来进行拆分,还请避免缩放示例以实现更好的可视化效果