Keras的train_on_batch为什么在第二个epoch时产生了零损失和准确度?

8
我正在使用一个大数据集,因此我正在尝试使用train_on_batch(或fit with epoch = 1)
model = Sequential()
model.add(LSTM(size,input_shape=input_shape,return_sequences=False))
model.add(Dense(output_dim))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=["accuracy"])

for e in range(nb_epoch):
    for batch_X, batch_y in batches:
        model.train_on_batch(batch_X,batch_y)
        # or
        # model.fit(batch_X,batch_y,batch_size=batch_size,nb_epoch=1,verbose=1,shuffle=True,)

但是当训练开始时,就会发生这种情况:
(0, 128)
Epoch 1/1
128/128 [==============================] - 2s - loss: 0.3262 - acc: 0.1130

(129, 257)
Epoch 1/1
128/128 [==============================] - 2s - loss: -0.0000e+00 - acc: 0.0000e+00

无论我等待多少个时代,都没有改变。即使我改变批次大小,仍然会发生同样的事情:第一批具有良好的值,然后它又回到了“loss: -0.0000e+00 - acc: 0.0000e+00”。有人可以帮忙理解这里发生了什么吗?

2
如果您的训练数据包含非常少量的唯一示例,并且您的网络在其第一批中学习了所有这些示例,那么可能会发生这种情况。也许您在数据集创建脚本中使用了数组引用而不是副本,导致意外放置了相同的元素。 - Dmitry Kostyaev
看一下预测和标签,看看网络是否真的达到了0准确率。这将有助于您进行调试。 - 1''
1
@DmitryKostyaev 相同的元素。这只是一个小错误,我感到有些傻。谢谢你的帮助。 - qkeras
投票关闭原因:(1)Keras自4年前以来发生了巨大变化;(2)调试细节不足;(3)这是OP账户上唯一的问题,所以不太可能解决(2)。 - OverLordGoldDragon
2个回答

1
这似乎是梯度消失/爆炸问题。就像有人说的那样,尝试调整学习率和/或NN层的深度/宽度。

0

如果分类太多,而且你的数据集不好;当系统找不到好结果时,它会自动打印局部最小值。尝试更改学习率。

opt = keras.optimizers.Adam(learning_rate=0.01)
model.compile(loss='categorical_crossentropy', optimizer=opt)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接