在 Keras 中训练神经网络的零精度

新手上路,请多包涵

我在 Keras 中训练回归问题的神经网络。为什么输出只有一个Dimension,每个Epoch的accuracy总是显示acc:0.0000e+00?

像这样:

1000199873 […………………………..] - ETA:5s - 损失:0.0057 - acc:0.0000e+00

2000199873 […………………………..] - ETA:4s - 损失:0.0058 - acc:0.0000e+00

3000199873 […………………………..] - ETA:3s - 损失:0.0057 - acc:0.0000e+00

4000199873 […………………………..] - ETA:3s - 损失:0.0060 - acc:0.0000e+00 …

198000199873 [==========================>。] - ETA:0s - 损失:0.0055 - acc:0.0000e+00

199000199873 [==========================>。] - ETA:0s - 损失:0.0055 - acc:0.0000e+00

199873199873 [==============================] - 4s - 损失:0.0055 - acc:0.0000e+00 - val_loss : 0.0180 - val_acc: 0.0000e+00

纪元 5050

但如果输出是二维或以上,精度没有问题。

我的模型如下:`

 input_dim = 14
batch_size = 1000
nb_epoch = 50
lrelu = LeakyReLU(alpha = 0.1)

model = Sequential()
model.add(Dense(126, input_dim=input_dim)) #Dense(output_dim(also hidden wight), input_dim = input_dim)
model.add(lrelu) #Activation

model.add(Dense(252))
model.add(lrelu)
model.add(Dense(1))
model.add(Activation('linear'))

model.compile(loss= 'mean_squared_error', optimizer='Adam', metrics=['accuracy'])
model.summary()
history = model.fit(X_train_1, y_train_1[:,0:1],
                    batch_size=batch_size,
                    nb_epoch=nb_epoch,
                    verbose=1,
                    validation_split=0.2)

loss = history.history.get('loss')
acc = history.history.get('acc')
val_loss = history.history.get('val_loss')
val_acc = history.history.get('val_acc')

'''saving model'''
from keras.models import load_model
model.save('XXXXX')
del model

'''loading model'''
model = load_model('XXXXX')

'''prediction'''
pred = model.predict(X_train_1, batch_size, verbose=1)
ans = [np.argmax(r) for r in y_train_1[:,0:1]]

原文由 soartseng 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 430
2 个回答

问题是您的最终模型输出具有线性激活,使模型成为回归问题,而不是分类问题。当模型根据类别正确分类数据时定义“准确性”,但由于其连续属性,“准确性”实际上并未针对回归问题定义。

使用 loss='categorical_crossentropy'activation='softmax' 要么摆脱作为指标的准确性并切换到完全回归,要么将你的问题变成分类问题。

这与您的问题类似: Link

有关详细信息,请参阅: StackExchange

原文由 mikal94305 发布,翻译遵循 CC BY-SA 3.0 许可协议

我遇到了一个类似的问题,在尝试了所有的建议但都没有奏效之后,我想一定是其他地方出了问题。

查看我的数据分布后,我意识到我并没有洗牌我的数据。所以我的训练数据是一个班级的大部分,而我的测试数据是 100% 的另一个班级。打乱数据后,精度不再是 0.0000e+00,而是更有意义的东西。

原文由 Anna Maule 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进