Keras MSE定义

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

def mean_squared_error(y_true, y_pred):    return K.mean(K.square(y_pred - y_true), axis=-1)

我原本期望均值是针对批次计算的,也就是axis=0,但实际上是axis=-1

我还尝试了一下,看看K.mean是否真的像numpy.mean那样工作。我一定是误解了什么。能有人解释一下吗?

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

我的意思是…想象一下进行回归,拥有一个输出神经元,并且以批量大小为十进行训练。

>>> import numpy as np>>> a = np.ones((10, 1))>>> aarray([[ 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.])

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


回答:

K.mean(a, axis=-1)np.mean(a, axis=-1) 只是在最后一个维度上取均值。这里的a是一个形状为(10, 1)的数组,在这种情况下,在最后一个维度上取均值与将其展平为形状为(10,)的一维数组是相同的。这样实现是为了支持更一般的案例,例如多元线性回归。

此外,您可以在运行时使用keras.backend.print_tensor检查计算图中节点的值。参见回答:在Keras训练时是否有办法调试张量内部的值?

编辑:你的问题似乎是关于为什么损失函数不返回单一标量值,而是为批次中的每个数据点返回一个标量值。为了支持样本加权,Keras的损失函数期望为批次中的每个数据点返回一个标量。参见损失函数文档fitsample_weight参数以获取更多信息。特别注意:“实际优化的目标是所有数据点的输出数组的[加权]均值。”

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注