首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在这段简单的代码中我的准确率总是0.2

为什么在这段简单的代码中我的准确率总是0.2
EN

Stack Overflow用户
提问于 2019-06-04 15:24:53
回答 1查看 166关注 0票数 2

我是这个领域的新手,正在尝试重新运行从互联网复制的示例LSTM代码。LSTM模型的精度始终是0.2,但预测的输出是完全正确的,这意味着精度应该是1。有人能告诉我为什么吗?

from numpy import array
from keras.models import Sequential, Dense, LSTM

length = 5
seq = array([i/float(length) for i in range(length)])  
print(seq)    
X = seq.reshape(length, 1, 1)    
y = seq.reshape(length, 1)

# define LSTM configuration
n_neurons = length
n_batch = 1000
n_epoch = 1000

# create LSTM
model = Sequential()    
model.add(LSTM(n_neurons, input_shape=(1, 1)))    
model.add(Dense(1))    
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])



# train LSTM
model.fit(X, y, epochs=n_epoch, batch_size=n_batch)#, verbose=2)    
train_loss, train_acc = model.evaluate(X, y)

print('Training set accuracy:', train_acc    
result = model.predict(X, batch_size=n_batch, verbose=0)    
for value in result:
    print('%.1f' % value)
EN

回答 1

Stack Overflow用户

发布于 2019-06-05 03:05:51

你在测量准确度,但你在训练一个回归者。这意味着你的输出是一个浮点数,而不是一个固定的类别值。

如果您将最后一次打印更改为3位小数精度(print('%.3f' % value) ),您将看到预测值与实际值非常接近,但并不完全相同,因此精度较低:

0.039
0.198
0.392
0.597
0.788

出于某些原因,正在使用的accuracy (sparse_categorical_accuracy)将0.00.039 (或类似的)视为成功而不是失败,这就是为什么您使用20%而不是0%的原因。

如果您将序列更改为不包含零,则将具有0%精度,这不太容易混淆:

seq = array([i/float(length) for i in range(1, length+1)])

最后,为了纠正这个问题,例如,您可以使用mae而不是accuracy作为度量,这样您将看到下面的错误:

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mae'])

另一种选择是切换到分类框架(将浮点数更改为类别值)。

希望这能有所帮助!如果我能深入了解为什么sparse_categorical_accuracy检测到0是命中而不是未命中,我将编辑答案。

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

https://stackoverflow.com/questions/56439209

复制
相关文章

相似问题

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