python - TensorFlow中的loss是如何计算的?
问题描述
我正在阅读 TensorwFlow (tf) 用户文档中的最小平方误差 (MSE)。
https://www.tensorflow.org/api_docs/python/tf/keras/metrics/mean_squared_error
当我对 MSE 进行硬编码并打印计算出的每个损失时,我观察到的值与 tf.
import numpy as np
import random
import tensorflow as tf
from tensorflow import keras
m = 200
n = 5
my_input= np.random.random([m,n])
my_output = np.random.random([m,1])
def obj(y_true,y_pred):
loss = tf.keras.losses.mean_squared_error(y_true,y_pred)
tf.print("\n")
tf.print(tf.math.reduce_mean(loss),"\n")
return (loss)
my_model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(my_input.shape[1],)),
tf.keras.layers.Dense(32, activation='softmax'),
tf.keras.layers.Dense(32, activation='relu'),
tf.keras.layers.Dense(1)
])
my_model.compile(loss=obj ,optimizer = tf.keras.optimizers.Adam(learning_rate=0.0001))
my_model.fit(my_input, my_output, epochs=5, batch_size=20, verbose=1)
损失值在第一步中匹配,但是之后总是存在差异。有人可以解释一下损失计算背后的机制吗?
Epoch 1/5
0.349255413
1/10 [==>...........................] - ETA: 3s - loss: 0.3493
0.449805915
0.453376621
0.500476539
0.294586331
0.269146353
0.358534873
7/10 [====================>.........] - ETA: 0s - loss: 0.3822
解决方案
默认情况下,每个 epoch 结束时的训练损失是批损失的平均值。
在您的情况下,您报告了第一个时期的前七个步骤以及相应的批次损失。因此,第七步的损失计算为前面步骤损失的简单平均值:
(0.349255413 + 0.449805915 + 0.453376621 + 0.500476539 + 0.294586331 + 0.269146353 + 0.358534873) / 7 = 0.3822
推荐阅读
- javascript - 带有 Javascript/Css3 实践的模态图像
- python - GPIO输入激活tkinter中的按钮
- java - Java“有序”信号量
- python - pygame,视频未初始化且未找到视频 - 在 Windows 10 中使用 ubuntu 终端
- java - 带有apache poi的excel上的多组列
- excel - 如何将 VBA 代码限制为特定的工作表?
- javascript - 我想添加具有某些hrefs的某个onclick功能
- android - 我刚进入 React Native 并试图在 Android Studio 上创建一个虚拟设备,但它一直显示以下错误,有什么建议吗?
- java - 连接到 MongoDB 集群的问题 [SSL 错误]
- php - 如何在 PHP 应用程序中正确包含 Angular 应用程序