我正在研究句子標籤問題。我已經做了我自己的嵌入和填充和我投入的樣子:Keras中的序列標籤
X_i = [[0,1,1,0,2,3...], [0,1,1,0,2,3...], ..., [0,0,0,0,0...], [0,0,0,0,0...], ....]
每個單詞句子我想預測四班的一個,所以我期望的輸出應該是這樣的:
Y_i = [[1,0,0,0], [0,0,1,0], [0,1,0,0], ...]
我的簡單的網絡架構是:
model = Sequential()
model.add(LSTM(input_shape = (emb,),input_dim=emb, output_dim=hidden, return_sequences=True))
model.add(TimeDistributedDense(output_dim=4))
model.add(Activation('softmax'))
model.compile(loss='binary_crossentropy', optimizer='adam')
model.fit(X_train, Y_train, batch_size=32, nb_epoch=3, validation_data=(X_test, Y_test), verbose=1, show_accuracy=True)
它顯示了約95%,而訓練,但是當我試圖用預測新句子訓練模型的結果是非常糟糕的。看起來模型剛剛爲第一個單詞學習了一些類,並且每次都顯示它。我認爲問題可能是:
由我自己填充(零向量在句尾),它可以使學習變得更糟嗎?
我應該嘗試學習不同長度的句子,沒有填充(如果是的話,你能幫助我如何火車這類在Keras模型的?)
學習錯誤的目標,但我想均值平方誤差,二叉交叉熵等,它不會改變。
與
TimeDistributedDense
和softmax
的東西,我認爲,我已經知道它是如何工作的,但仍然不是100%確定。
我很高興看到有關此問題的任何提示或幫助,謝謝!
你嘗試過在你的lstms輟學?還有,你有沒有試過lstm批量歸一化 – Julius
因爲你有很高的訓練集學習率,你可以做高失分做正規化 – Julius
,然後也許嘗試多層lstm – Julius