代码之家  ›  专栏  ›  技术社区  ›  Spook

Keras-损失和val_损失增加

  •  -3
  • Spook  · 技术社区  · 8 年前

    我在Keras中使用LSTM训练聊天机器人的神经网络。

    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')])
    

    语境和话语是形状为(1000,10300)或(10000,10300)的numpy数组。第一个LSTM的输入_形状应为(10300)。大小为300的向量是由Word2vec模型创建的单词嵌入表示的单词。在这个例子中,输入数据是这些向量中的10个。

    最大的问题是,在训练期间,损耗和Valu损耗几乎都在稳步增加。

    Epoch 1/5000
    900/900 [==============================] - 18s 20ms/step - loss: -0.5855 - acc: 0.0220 - val_loss: -0.6527 - val_acc: 0.0260
    Epoch 2/5000
    900/900 [==============================] - 13s 14ms/step - loss: -0.6299 - acc: 0.0239 - val_loss: -0.6673 - val_acc: 0.0240
    Epoch 3/5000
    900/900 [==============================] - 12s 14ms/step - loss: -0.6387 - acc: 0.0213 - val_loss: -0.6764 - val_acc: 0.0160
    Epoch 4/5000
    900/900 [==============================] - 12s 13ms/step - loss: -0.6457 - acc: 0.0229 - val_loss: -0.6821 - val_acc: 0.0240
    Epoch 5/5000
    900/900 [==============================] - 12s 14ms/step - loss: -0.6497 - acc: 0.0274 - val_loss: -0.6873 - val_acc: 0.0230
    Epoch 6/5000
    900/900 [==============================] - 14s 15ms/step - loss: -0.6507 - acc: 0.0276 - val_loss: -0.6874 - val_acc: 0.0240
    Epoch 7/5000
    900/900 [==============================] - 15s 16ms/step - loss: -0.6517 - acc: 0.0279 - val_loss: -0.6877 - val_acc: 0.0260
    Epoch 8/5000
    900/900 [==============================] - 14s 16ms/step - loss: -0.6526 - acc: 0.0272 - val_loss: -0.6875 - val_acc: 0.0230
    Epoch 9/5000
    900/900 [==============================] - 14s 16ms/step - loss: -0.6530 - acc: 0.0274 - val_loss: -0.6879 - val_acc: 0.0240
    Epoch 10/5000
    900/900 [==============================] - 14s 15ms/step - loss: -0.6530 - acc: 0.0278 - val_loss: -0.6871 - val_acc: 0.0230
    

    损耗和val_损耗以这种方式变化而不减少的可能原因是什么?神经网络、训练数据或其他方面是否有问题?

    如果你需要任何进一步的信息,我会提供他们。

    谢谢你的回复

    1 回复  |  直到 8 年前
        1
  •  2
  •   zimmerrol    8 年前

    您正在使用 cosine_proximity 损失函数 keras . 这一损失是 1 的输出与目标完全不匹配,但 -1 如果目标与输出完全匹配(请参见 this this ). 因此,收敛到 -1 这是一个好兆头,因为目标和实际输出之间的实际差异正在减小。