- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当损失函数为均方误差时,准确度如何定义?是mean absolute percentage error ?
我使用的模型具有输出激活线性,并使用 loss=mean_squared_error
model.add(Dense(1))
model.add(Activation('linear')) # number
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
输出如下所示:
Epoch 99/100
1000/1000 [==============================] - 687s 687ms/step - loss: 0.0463 - acc: 0.9689 - val_loss: 3.7303 - val_acc: 0.3250
Epoch 100/100
1000/1000 [==============================] - 688s 688ms/step - loss: 0.0424 - acc: 0.9740 - val_loss: 3.4221 - val_acc: 0.3701
那么,例如val_acc: 0.3250 是什么意思? Mean_squared_error 应该是标量而不是百分比 - 不应该吗? val_acc 是均方误差、平均百分比误差还是其他函数?
摘自维基百科上 MSE 的定义:https://en.wikipedia.org/wiki/Mean_squared_error
The MSE is a measure of the quality of an estimator—it is always non-negative, and values closer to zero are better.
这是否意味着 val_acc: 0.0
的值比 val_acc: 0.325
更好?
编辑:我训练时准确度指标输出的更多示例 - 随着我训练的增多,准确度会增加。而损失函数 - mse 应该减小。 mse 的准确度定义良好吗?在 Keras 中如何定义它?
lAllocator: After 14014 get requests, put_count=14032 evicted_count=1000 eviction_rate=0.0712657 and unsatisfied allocation rate=0.071714
1000/1000 [==============================] - 453s 453ms/step - loss: 17.4875 - acc: 0.1443 - val_loss: 98.0973 - val_acc: 0.0333
Epoch 2/100
1000/1000 [==============================] - 443s 443ms/step - loss: 6.6793 - acc: 0.1973 - val_loss: 11.9101 - val_acc: 0.1500
Epoch 3/100
1000/1000 [==============================] - 444s 444ms/step - loss: 6.3867 - acc: 0.1980 - val_loss: 6.8647 - val_acc: 0.1667
Epoch 4/100
1000/1000 [==============================] - 445s 445ms/step - loss: 5.4062 - acc: 0.2255 - val_loss: 5.6029 - val_acc: 0.1600
Epoch 5/100
783/1000 [======================>.......] - ETA: 1:36 - loss: 5.0148 - acc: 0.2306
最佳答案
您的问题至少有两个单独的问题。
现在从史努比博士的评论和另一个答案中应该可以清楚地看出第一个问题:在回归问题(例如您的问题)中,准确性是毫无意义的;另请参阅 patyork 在 this Keras thread 中的评论。无论好坏,事实是 Keras 不会“保护”您或任何其他用户在您的代码中放置无意义的请求,即您不会收到任何错误,甚至不会收到警告,表明您正在尝试执行某些操作没有意义,例如要求回归设置中的准确性。
澄清这一点后,另一个问题是:
既然 Keras 确实返回了一个“准确度”,即使在回归设置中,它到底是什么以及如何计算的?
为了在这里阐明一些情况,让我们恢复到公共(public)数据集(因为您没有提供有关数据的任何详细信息),即 Boston house price dataset (本地保存为housing.csv
),并运行一个简单的实验,如下所示:
import numpy as np
import pandas
import keras
from keras.models import Sequential
from keras.layers import Dense
# load dataset
dataframe = pandas.read_csv("housing.csv", delim_whitespace=True, header=None)
dataset = dataframe.values
# split into input (X) and output (Y) variables
X = dataset[:,0:13]
Y = dataset[:,13]
model = Sequential()
model.add(Dense(13, input_dim=13, kernel_initializer='normal', activation='relu'))
model.add(Dense(1, kernel_initializer='normal'))
# Compile model asking for accuracy, too:
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y,
batch_size=5,
epochs=100,
verbose=1)
正如您的情况一样,模型拟合历史记录(此处未显示)显示损失不断减少,准确度大致增加。现在让我们使用适当的 Keras 内置函数来评估同一训练集中的模型性能:
score = model.evaluate(X, Y, verbose=0)
score
# [16.863721372581754, 0.013833992168483997]
score
数组的具体内容取决于我们在模型编译期间具体请求的内容;在我们的例子中,第一个元素是损失(MSE),第二个元素是“准确性”。
此时,让我们看一下 metrics.py
file 中 Keras binary_accuracy
的定义:
def binary_accuracy(y_true, y_pred):
return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)
因此,Keras 生成预测 y_pred
后,首先对它们进行舍入,然后检查其中有多少等于真实标签 y_true
,然后再进行舍入。获取平均值。
在我们的例子中,让我们使用简单的 Python 和 Numpy 代码来复制此操作,其中真正的标签是 Y
:
y_pred = model.predict(X)
l = len(Y)
acc = sum([np.round(y_pred[i])==Y[i] for i in range(l)])/l
acc
# array([0.01383399])
好吧,宾果游戏!这实际上与上面 score[1]
返回的值相同...
长话短说:由于您(错误地)在模型编译中请求 metrics=['accuracy']
,Keras 会 do its best to satisfy you ,并且确实会返回一些“准确度”,计算如上所示,尽管这在您的设置中完全没有意义。
在很多设置中,Keras 在后台执行相当无意义的操作,而不向用户提供任何提示或警告;我碰巧遇到的其中两个是:
在多类设置中,当使用 请求
- 请参阅 Keras binary_crossentropy vs categorical_crossentropy performance? 中我的答案和 Why is binary_crossentropy more accurate than categorical_crossentropy for multiclass classification in Keras? loss='binary_crossentropy'
(而不是 categorical_crossentropy
)时,会给出毫无意义的结果metrics=['accuracy']
完全禁用 Dropout,在极端情况下,当有人请求 1.0 的 dropout 率时 - 请参阅 Dropout behavior in Keras with rate=1 (dropping all input units) not as expected 中的我的答案
关于machine-learning - 当损失为均方误差 (MSE) 时,什么函数定义 Keras 中的准确性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48775305/
我正在寻找 GradientBoostingClassifier在 sklearn .然后,我发现有 3 种标准。弗里德曼 mse,mse,mae。sklearn提供的描述是: The functio
我正在训练一个在最后一层具有连续输出的卷积网络。最后一层有 4 个节点。我使用均方误差作为损失函数。作为检查,我使用了 Tensorflow 的均方误差。对于第一个纪元的第一批,这只给出了相同的结果。
起因 我有个网站A【蓝色服务】,要对网站A进行改版【绿色服务】,其中用户中心已经改完了,希望当用户访问时,如果http请求头中包含isGroup,并且isGroup=1时,去新的绿色服务,反之就还是
我有 2 个张量 .size的 torch.Size([2272, 161]) .我想得到它们之间的均方误差。但是,我希望它沿着 161 个 channel 中的每一个,以便我的误差张量具有 .siz
在使用元启发式算法的聚类分析论文中,许多都优化了均方量化误差 (MSE)。例如在 [1]和 [2] . 我对结果感到困惑。他们告诉他们已经使用 MSE 作为目标函数。但是他们已经报告了欧几里德距离的簇
假设有两个张量列表: r1 = K.variable(1) r2 = K.variable(2) v1 = K.variable(3) v2 = K.variable(4) l1 = [r1,r2]
我是随机森林新手,我有一个关于回归的问题。我正在使用 R 包 randomForests 来计算 RF 模型。 我的最终目标是选择对预测连续性状很重要的变量集,因此我正在计算一个模型,然后删除准确度平
有人能指出这个项目 ( Managed Service Engine ) 是否已被放弃吗? 我需要决定是否将其用作我的企业服务虚拟化计划的一部分。我目前看到来自 Microsoft 的许多竞争解决方案
我正在训练一个 keras 模型,它的最后一层是单个 sigmoid单元: output = Dense(units=1, activation='sigmoid') 我正在用一些训练数据训练这个模型
我试图从我抓取的数据集中预测一些价格。我从未为此使用过 Python(我通常使用 tidyverse ,但这次我想探索 pipeline 。 所以这是代码片段: import pandas as pd
我正在使用 scikit learn 创建回归模型。现在我想知道如何评估均方误差是否合理或不好? 例如,当我进行交叉验证时,训练数据模型的测试数据的 MSE 为 0.70。分数合理还是不好? 计算模型
我试图显示使用getUserMedia从网络摄像头获取的MediaStream,并使用可能的播放机制将其中继到远程对等设备(作为实验)。我不是直接使用webRTC,因为我想控制原始数据。 我遇到的问题
我正在使用 scikit learn 创建回归模型。现在我想知道如何评估均方误差是否合理或不好? 例如,当我进行交叉验证时,训练数据模型的测试数据的 MSE 为 0.70。分数合理还是不好? 计算模型
我不确定这是否是问这个问题的正确地方,但是在哪里可以找到有关如何计算两个图像的 MSE 的分步指南? 我知道公式是什么,但不知道如何付诸实践。 最佳答案 在 C 语言中你可能会这样做: int sum
我正在构建一个使用 MSE 作为误差函数的卷积自动编码器。图像的 MSE 是如何定义的?如果图像以简单矩阵形式呈现,MSE 是否只是各个行列式之差的平方?或者是矩阵之差的行列式的平方? 最佳答案 计算
我得到了不同的 mse 结果。在训练过程中,我在最后一个训练周期后得到 0.296,当我评估我的模型时,我得到 0.112。有谁知道为什么会这样吗? 这是代码: model = Sequential(
假设您有一个代表自动编码器 (AE) 的网络。假设它有 90 个输入/输出。我想用大小为 100 的批处理对其进行批量训练。我将用 x 表示我的输入,用 y 表示我的输出。 现在,我想使用 MSE 来
我正在使用 Scikit-learn 库进行线性回归。一切都简单明了。只需 6 行代码,我就可以完成这项工作。不过,我想知道到底发生了什么。 由于我是机器学习的初学者,也许我的问题是错误的,但我想知道
训练期间 MSE 是否有可能增加? 我目前正在计算每个时期验证集的 MSE,在某个点,MSE 开始增加而不是减少。有人对这种行为有解释吗? 最佳答案 回答您的问题:是的,有可能。 如果您使用正则化或随
我的特征向量大小为 1x4098。每个特征向量对应一个 float (温度)。在训练中,我有 10,000 个样本。因此,我的训练集大小为 10000x4098,标签为 10000x1。我想使用线性回
我是一名优秀的程序员,十分优秀!