Machine learning 当损失为均方误差(MSE)时,什么函数定义了Keras中的精度?

Machine learning 当损失为均方误差(MSE)时,什么函数定义了Keras中的精度?,machine-learning,keras,regression,loss-function,mean-square-error,Machine Learning,Keras,Regression,Loss Function,Mean Square Error,当损失函数为均方误差时,如何定义精度?是吗 我使用的模型具有输出激活线性,并使用loss=mean_squared_error model.add(密集型(1)) 型号。添加(激活(‘线性’)#编号 compile(loss='mean_squared_error',optimizer='adam',metrics=['accurity']) 输出如下所示: epoch99/100 1000/1000[==============================================

当损失函数为均方误差时,如何定义精度?是吗

我使用的模型具有输出激活线性,并使用
loss=mean_squared_error

model.add(密集型(1))
型号。添加(激活(‘线性’)#编号
compile(loss='mean_squared_error',optimizer='adam',metrics=['accurity'])
输出如下所示:

epoch99/100
1000/1000[====================================================================================687s 687ms/阶跃-损耗:0.0463-附件:0.9689-val_损耗:3.7303-val_附件:0.3250
纪元100/100
1000/1000[=======================================================================================-688S688ms/阶跃-损耗:0.0424-acc:0.9740-val\U损耗:3.4221-val\U acc:0.3701
那么,例如val_acc:0.3250意味着什么?均方误差应该是一个标量而不是一个百分比,不是吗?那么val_acc是均方误差、平均百分比误差还是其他函数呢

根据维基百科上MSE的定义:

均方误差是一种衡量估计器质量的指标,它总是如此 非负数,值越接近零越好

这是否意味着
val\u acc:0.0
的值优于
val\u acc:0.325

编辑:我训练时精度度量输出的更多示例-随着训练次数的增加,精度增加。而损失函数-mse应减小。mse的准确度是否定义良好?在Keras中如何定义

lAllocator:14014 get请求后,put_count=14032收回_count=1000收回率=0.0712657,未满足分配率=0.071714
1000/1000[==================================================================-453s 453ms/步-损耗:17.4875-附件:0.1443-val_损耗:98.0973-val_附件:0.0333
纪元2/100
1000/1000[===========================================================================-443s 443ms/步长-损耗:6.6793-acc:0.1973-val_损耗:11.9101-val_acc:0.1500
纪元3/100
1000/1000[=========================================================444s 444ms/步-损耗:6.3867-附件:0.1980-val_损耗:6.8647-val_附件:0.1667
纪元4/100
1000/1000[===============================================================445s/step-损耗:5.4062-acc:0.2255-val\u损耗:5.6029-val\u acc:0.1600
纪元5/100
783/1000[===================>…]-预计到达时间:1:36-损失:5.0148-附件:0.2306
损失函数(本例中为均方误差)用于指示预测与目标值的偏差程度。在训练阶段,权重将基于此数量进行更新。如果您正在处理一个分类问题,那么定义一个称为准确性的额外度量是很常见的。它监控在多少情况下预测了正确的类。这表示为百分比值。因此,值为0.0意味着没有正确的决策,1.0意味着只有正确的小数点。 当你的人际网络在训练时,损失会减少,通常准确度会提高


请注意,与丢失相反,精度通常不用于更新网络的参数。它有助于监控学习进度和网络的当前性能。

您的问题至少有两个独立的问题

从史努比博士的评论中,第一个答案现在应该已经很清楚了,而另一个答案是:在回归问题中,准确度是没有意义的,比如你的问题;另见patyork在中的评论。无论好坏,事实上Keras都不会“保护”您或任何其他用户在代码中提出无意义的请求,也就是说,您不会收到任何错误,甚至警告,表明您正在尝试一些没有意义的事情,例如请求回归设置中的准确性

澄清后,另一个问题是:

即使在回归设置中,由于Keras确实返回“准确度”,它到底是什么?它是如何计算的?

为了说明这一点,让我们回到一个公共数据集(因为您没有提供有关数据的任何详细信息),即(本地保存为
housing.csv
),并运行一个简单的实验,如下所示:

将numpy导入为np
进口大熊猫
进口干酪
从keras.models导入顺序
从keras.layers导入稠密
#加载数据集
dataframe=pandas.read\u csv(“housing.csv”,delim\u whitespace=True,header=None)
dataset=dataframe.values
#分为输入(X)和输出(Y)变量
X=数据集[:,0:13]
Y=数据集[:,13]
模型=顺序()
add(稠密(13,input_dim=13,kernel_initializer='normal',activation='relu'))
add(稠密(1,kernel_initializer='normal'))
#编译模型时也要求准确性:
compile(loss='mean_squared_error',optimizer='adam',metrics=['accurity'])
模型拟合(X,Y,
批次尺寸=5,
纪元=100,
详细=1)
与您的情况一样,模型拟合历史记录(此处未显示)显示损失减少,精度大致增加。现在,让我们使用适当的Keras内置功能在同一培训集中评估模型性能:

score=model.evaluate(X,Y,verbose=0)
分数
# [16.863721372581754, 0.013833992168483997]
score
数组的确切内容取决于我们在模型编译期间所要求的内容;在我们这里的例子中,第一个元素是损耗(MSE),第二个元素是“精度”

在这一点上,让我们看一看Keras
二进制精度的定义:

def二进制精度(y_真,y_pred):
返回K.mean(K.equal(y_真,K.round(y_pred)),轴=-1)
因此,在Keras生成预测值
y_pred
后,它首先对预测值进行四舍五入,然后检查有多少预测值与真标签值
y_true
相等,然后再得出平均值

在本例中,让我们使用普通Python和Numpy代码复制此操作,其中真正的标签是
Y

y_pred=model.predict(X)
l=len(Y)
acc=总和([np.四舍五入(y_pred[i])==y[i]表示范围(l)内的i)]/l
行政协调会
#数组([0.01383399])
def binary_accuracy(y_true, y_pred):
    return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)