我想在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
Run Code Online (Sandbox Code Playgroud)
(遗憾的是,这些在优化过程中不会打印任何内容).
Dan*_*ler 26
张量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:预测.与Y_true形状相同的Theano/TensorFlow张量.
真实标签表示真实/目标数据.标签在这里是一个选择严重的词,它只是分类模型中的"标签".
预测意味着您的模型的结果.