首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras MSE定义

Keras MSE定义
EN

Stack Overflow用户
提问于 2018-02-05 08:37:30
回答 3查看 5.1K关注 0票数 6

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

代码语言:javascript
复制
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。我一定是误会了什么。谁能澄清一下吗?

我不能在运行时查看成本函数,对吗?据我所知,函数是在编译时调用的,这使得我无法计算具体的值。

我是说..。想象一下,做回归,有一个单一的输出神经元和训练的批次大小为10。

代码语言:javascript
复制
>>> 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.])

它所做的就是把数组夷为平地,而不是取所有预测的平均值。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-05 13:44:56

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

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

编辑:您的问题似乎是为什么丢失不返回单个标量值,而是返回批处理中每个数据点的标量值。为了支持样本加权,Keras损失将为批处理中的每个数据点返回一个标量。有关更多信息,请参见损失单据fitsample_weight参数。具体说明:“实际优化的目标是所有数据点的输出数组的加权平均值。”

票数 3
EN

Stack Overflow用户

发布于 2018-08-15 09:07:47

守则如下:

代码语言:javascript
复制
 def mean_squared_error(y_true, y_pred):
     return K.mean(K.square(y_pred - y_true), axis=-1)

一个选择轴为-1的应用程序是,例如,对于彩色图片,它有3层RGB。每个层的大小为512乘512像素,并且它们存储在大小为512乘512乘以3的对象中。

假设您的任务涉及重建图片,并将其存储在另一个大小为512乘512乘以3的对象中。

调用MSE将使您能够分析每个像素的重建任务有多好。输出的大小为512乘512,总结了每个像素的性能。

票数 2
EN

Stack Overflow用户

发布于 2018-02-23 06:44:42

我和你有同样的问题。在我做了一些实验之后,我假设返回一个标量或张量作为损失并不重要,Keras (tensorflow)框架可以自动处理它。例如,如果应用K.tf.reduce_mean()来获取标量而不是向量,框架只需再添加一个步骤来计算reduce_mean()的梯度。基于梯度链规则,结果不受影响。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48618525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档