Python Keras何时以及如何计算每批样本的指标?

Python Keras何时以及如何计算每批样本的指标?,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我看到Keras自定义度量是如何工作的,度量函数中的tf.print和model.fit的回调打印之间的计算不匹配 将tensorflow作为tf导入#tf2.4.1 将numpy作为np导入 模型=tf.keras.models.Sequential( 致密(1,输入_形状=(1,)) ) 定义我的度量值fn(y_真,y_pred): 平方差=tf.square(y_真-y_pred) 损失=tf.减少平均值(平方差,轴=-1) tf.打印(y_真形状,y_前形状,损耗,tf.减少平均值(平方

我看到Keras自定义度量是如何工作的,度量函数中的
tf.print
model.fit的回调打印之间的计算不匹配

将tensorflow作为tf导入#tf2.4.1
将numpy作为np导入
模型=tf.keras.models.Sequential(
致密(1,输入_形状=(1,))
)
定义我的度量值fn(y_真,y_pred):
平方差=tf.square(y_真-y_pred)
损失=tf.减少平均值(平方差,轴=-1)
tf.打印(y_真形状,y_前形状,损耗,tf.减少平均值(平方差))
回波损耗
compile(优化器='adam',loss='mean\u squared\u error',metrics=[my\u metric\u fn])
x=np.random.rand(4,1)
y=x**2
历史=model.fit(x=x,y=y,批次大小=2,时代=2)
打印(历史,历史)
输出(格式化以提高可读性)

请参见上述输出中批次的打印损失

纪元1/2 1/2 tf.print:0.02672063,model.fit:0.0267。好的。
纪元1/2 2/2 tf.print:0.109848022,但model.fit:0.0544。不行


我如何理解这些匹配和不匹配?0.0544来自何处?

在keras中,训练损失/度量在每个历元结束时计算为每批损失/度量的平均值。因此,在你的情况下:

EPOCH 1: (0.02672063 + 0.109848022) / 2 = 0.068284326
EPOCH 2: (0.0456855185 + 0.088704437) / 2 = 0.06719497775
对应于:

history.history['loss'] ==> [0.06828432530164719, 0.06719497591257095]

是的,我知道。0.0544是如何产生的?谢谢@渡边哪一个是你的tf版本?@Watanabe.N很抱歉,它是2.4.1(正如你所报道的和我所怀疑的)。。。在TF2.3.0中,这并不像你在这里看到的那样:啊,真的。我读了你的笔记本,这对我来说很有意义。我在colab上使用tf2.3.1在我的环境中进行了确认。在我的tf2.4.1示例中,(0.02672063+0.109848022)/2=0.068284326,这并不等于0.0544。这很奇怪。我要提出一个问题。有什么我错过的吗?我真的很感谢你的帮助。我发现需要更多的时间来调查,找出原因和答案。答案可能是通过潜入
model.fit
方法得到的详细报告。讨论了一个github问题。在一切都弄清楚之前,我想把这个问题保留下来,不要给出公认的答案,这样每个人都有机会深入研究这个问题。
history.history['loss'] ==> [0.06828432530164719, 0.06719497591257095]