metric & loss

来源:3-12 tf.GradientTape与tf.keras结合使用

慕九州7272337

2022-07-14

老师,请教您如下问题:
从上到下分别是图1和图2.
1.您在3-12中先讲解了metric的用法如图1所示:当不对Metric进行reset的话,结果是分别累加metric中2个变量的差值的平方,然后再求取均值,得到了最后的累计结果。这不就是均方差么
2.图2中得到的x_batch,y_batch都是列表么?假设batchsize=32,x_batch列表有32个训练样本?红框框起来的metric在计算时,是分别将y_batch列表中的元素和y_pred列表中的元素分别对应做差,然后求取平方,得到一个列表。在第二层for循环上一个step中上一个batch中计算出的这个metric列表结果,还会在下一个step中进行累加,然后除以step的次数求平均么?如果求平均的话那么一个epoch循环迭代完,最后的metric,是steps_per_eopch个batch最后的平均么,
3.计算每一个batch/step的loss数据的意义,每一个batch都是被N个样本打乱之后平均分出来一批批的么?还是每次取batch都把N个样本打乱呢?如果是打乱之后平均32个分出来的bacth,那么每一次迭代计算Loss的时候针对的32个样本是不同的,下一次32个样本同上一次不同,就算loss减小了,又不是同一批32个样本计算的,loss下降了,真的总体Loss就下降了么。图2中也没有算整体样本的平均loss呀,只是算的每一个step的Loss,到底有什么意义呢

图片描述图片描述

写回答

1回答

正十七

2022-07-17

1.您在3-12中先讲解了metric的用法如图1所示:当不对Metric进行reset的话,结果是分别累加metric中2个变量的差值的平方,然后再求取均值,得到了最后的累计结果。这不就是均方差么

没看懂你的疑问是什么,我们就是在算均方差啊。

2.图2中得到的x_batch,y_batch都是列表么?假设batchsize=32,x_batch列表有32个训练样本?红框框起来的metric在计算时,是分别将y_batch列表中的元素和y_pred列表中的元素分别对应做差,然后求取平方,得到一个列表。在第二层for循环上一个step中上一个batch中计算出的这个metric列表结果,还会在下一个step中进行累加,然后除以step的次数求平均么?如果求平均的话那么一个epoch循环迭代完,最后的metric,是steps_per_eopch个batch最后的平均么,

x_batch, y_batch可以认为是样本列表。x_batch的size是(batch_size, dim1, ..), y_batch的size是(batch_size, 1) or (batch_size). 红框框里,loss和metric是分开算的,loss是stateless的,是单个batch的。metric是stateful的,算的是累积的。metric内部有状态,会帮你做平均,不用在后面自己计算,也不会产生列表结果。


> 3.计算每一个batch/step的loss数据的意义,每一个batch都是被N个样本打乱之后平均分出来一批批的么?还是每次取batch都把N个样本打乱呢?如果是打乱之后平均32个分出来的bacth,那么每一次迭代计算Loss的时候针对的32个样本是不同的,下一次32个样本同上一次不同,就算loss减小了,又不是同一批32个样本计算的,loss下降了,真的总体Loss就下降了么。图2中也没有算整体样本的平均loss呀,只是算的每一个step的Loss,到底有什么意义呢

一般情况下,是在一个epoch结束后才会重新打乱数据。计算loss的意义在于在很多step上看loss的趋势,如果一个模型收敛,那么下一个epoch上各个batch的loss要显著低于上一个epoch中各个batch的loss。相邻的batch之间的loss比较没有意义,因为数据都是随机采样拿到的,loss抖动会很大。







0
1
慕九州7272337
非常感谢!
2022-07-18
共1条回复

Google老师亲授 TensorFlow2.0 入门到进阶

Tensorflow2.0实战—以实战促理论的方式学习深度学习

1849 学习 · 896 问题

查看课程