我在Keras中有小型神经网络。
contextTrain, contextTest, utteranceTrain, utteranceTest = train_test_split(context, utterance, test_size=0.1, random_state=1)
model = Sequential()
model.add(LSTM(input_shape=contextTrain.shape[1:], return_sequences=True, units=300, activation="sigmoid", kernel_initializer="glorot_normal", recurrent_initializer="glorot_normal"))
model.add(LSTM(return_sequences=True, units=300, activation="sigmoid", kernel_initializer="glorot_normal", recurrent_initializer="glorot_normal"))
model.compile(loss="cosine_proximity", optimizer="adam", metrics=["accuracy"])
model.fit(contextTrain, utteranceTrain, epochs=5000, validation_data=(contextTest, utteranceTest), callbacks=[ModelCheckpoint("model{epoch:02d}.h5", monitor='val_acc', save_best_only=True, mode='max')])
上下文和话语是具有形状的numpy数组,例如(100、15、300)。第一个LSTM的input_shape应为(15,300)。
我不知道发生了什么,但是突然间,它在训练过程中显示出负损失和val_loss。过去通常为正(大约0.18左右)。
训练90个样本,验证10个样本
Epoch 1/5000 90/90 [==============================-5s 52ms / step-损失:-0.4729-acc:0.0059-val_loss:-0.4405-val_acc:0.0133
Epoch 2/5000 90/90 [==============================-2s 18ms / step-损失:-0.5091-acc:0.0089-val_loss:-0.4658-val_acc:0.0133
Epoch 3/5000 90/90 [==============================-2s 18ms / step-损失:-0.5204-acc:0.0170-val_loss:-0.4829-val_acc:0.0200
Epoch 4/5000 90/90 [==============================-2s 20ms / step-损失:-0.5296-acc:0.0244-val_loss:-0.4949-val_acc:0.0333
Epoch 5/5000 90/90 [==============================-2s 20ms / step-损失:-0.5370-acc:0.0422-val_loss:-0.5021-val_acc:0.0400
是什么意思?可能的原因是什么?
谢谢您的答复
损失只是您要尽量减少的标量。不是应该是积极的!例如,余弦接近损失将通常是负面的(试图通过最小化负标量)。
这里是使用余弦近似的another example,其值也为负。