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

问题描述 投票:9回答:1

我使用的是大型数据集,因此我尝试使用train_on_batch(或适合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

我等待多少个时代都没有关系,它不会改变。即使我更改批次大小,也会发生相同的事情:第一个批次具有良好的值,然后再次变为“损失:-0.0000e + 00-acc:0.0000e + 00”。

有人可以帮助您了解这里发生的事情吗?

python batch-processing training-data keras lstm
1个回答
0
投票

如果类别太多,并且您的数据集不好;当系统找不到很好的结果时,它将自动打印local minima。尝试更改学习率。

opt = keras.optimizers.Adam(learning_rate=0.01)
model.compile(loss='categorical_crossentropy', optimizer=opt)
© www.soinside.com 2019 - 2024. All rights reserved.