Keras MSE 定义

Nim*_*avi 6 python machine-learning neural-network deep-learning keras

我偶然发现了mse在 Keras 中的定义,我似乎找不到解释。

def mean_squared_error(y_true, y_pred):
    return K.mean(K.square(y_pred - y_true), axis=-1)
Run Code Online (Sandbox Code Playgroud)

我期待跨批次的平均值,即axis=0,但相反,它是axis=-1

我还稍微玩了一下,看看它的K.mean行为是否真的像numpy.mean. 我一定是误会了什么。有人可以澄清一下吗?

我实际上无法在运行时查看成本函数内部,对吗?据我所知,该函数是在编译时调用的,这会阻止我评估具体值。

我的意思是......想象一下进行回归并有一个输出神经元并以 10 的批量大小进行训练。

>>> import numpy as np
>>> a = np.ones((10, 1))
>>> a
array([[ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.]])
>>> np.mean(a, axis=-1)
array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])
Run Code Online (Sandbox Code Playgroud)

它所做的只是压平数组,而不是取所有预测的平均值。

tia*_*iao 3

K.mean(a, axis=-1)并且np.mean(a, axis=-1)只是取最终维度的平均值。这a是一个具有 shape 的数组(10, 1),在这种情况下,在最终维度上取平均值恰好与将其展平为 shape 的一维数组相同(10,)。像这样实现它支持更一般的情况,例如多元线性回归。

此外,您可以使用 在运行时检查计算图中节点的值keras.backend.print_tensor。请参阅答案:在 Keras 上训练时,有什么方法可以调试张量内的值吗?

编辑:您的问题似乎是关于为什么损失不返回单个标量值,而是返回批次中每个数据点的标量值。为了支持样本加权,Keras 损失预计会为批次中的每个数据点返回一个标量。有关更多信息,请参阅损失文档sample_weight论证。fit特别注意:“实际的优化目标是所有数据点的输出数组的[加权]平均值。”