首页 > 解决方案 > 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

标签: pythontensorflowkerasdeep-learning

解决方案


默认情况下,每个 epoch 结束时的训练损失是批损失的平均值。

在您的情况下,您报告了第一个时期的前七个步骤以及相应的批次损失。因此,第七步的损失计算为前面步骤损失的简单平均值:

(0.349255413 + 0.449805915 + 0.453376621 + 0.500476539 + 0.294586331 + 0.269146353 + 0.358534873) / 7 = 0.3822

推荐阅读