我有2列的數據集 - 每一列一組文檔。我必須將Col A中的文檔與Col B中提供的文檔相匹配。這是一個監督分類問題。所以我的訓練數據包含一個標籤欄,指出文件是否匹配。LSTM模型輔助輸入
爲了解決這個問題,我已經創建的一組特性,比如F1-F25(通過比較兩份文件),然後訓練的這些特徵的二元分類。這種方法工作得很好,但現在我想評估Deep Learning模型(特別是LSTM模型)。
我使用Python中keras
庫。通過keras文檔和其他教程可在網上去後,我已成功地做到以下幾點:
from keras.layers import Input, Embedding, LSTM, Dense
from keras.models import Model
# Each document contains a series of 200 words
# The necessary text pre-processing steps have been completed to transform
each doc to a fixed length seq
main_input1 = Input(shape=(200,), dtype='int32', name='main_input1')
main_input2 = Input(shape=(200,), dtype='int32', name='main_input2')
# Next I add a word embedding layer (embed_matrix is separately created
for each word in my vocabulary by reading from a pre-trained embedding model)
x = Embedding(output_dim=300, input_dim=20000,
input_length=200, weights = [embed_matrix])(main_input1)
y = Embedding(output_dim=300, input_dim=20000,
input_length=200, weights = [embed_matrix])(main_input2)
# Next separately pass each layer thru a lstm layer to transform seq of
vectors into a single sequence
lstm_out_x1 = LSTM(32)(x)
lstm_out_x2 = LSTM(32)(y)
# concatenate the 2 layers and stack a dense layer on top
x = keras.layers.concatenate([lstm_out_x1, lstm_out_x2])
x = Dense(64, activation='relu')(x)
# generate intermediate output
auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(x)
# add auxiliary input - auxiliary inputs contains 25 features for each document pair
auxiliary_input = Input(shape=(25,), name='aux_input')
# merge aux output with aux input and stack dense layer on top
main_input = keras.layers.concatenate([auxiliary_output, auxiliary_input])
x = Dense(64, activation='relu')(main_input)
x = Dense(64, activation='relu')(x)
# finally add the main output layer
main_output = Dense(1, activation='sigmoid', name='main_output')(x)
model = Model(inputs=[main_input1, main_input2, auxiliary_input], outputs= main_output)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit([x1, x2,aux_input], y,
epochs=3, batch_size=32)
然而,當我這個分數在訓練數據上,我得到了相同的概率。所有情況下得分。這個問題似乎與輔助輸入的輸入方式有關(因爲當我移除輔助輸入時它會產生有意義的輸出)。 我也嘗試在網絡中的不同位置插入輔助輸入。但不知何故,我無法得到這個工作。
任何指針?
不知道這是有意的,但只有auxiliary_output是(1)。它真的是你期望的嗎?只有一個結果合併25個輔助輸入? - 當您僅訓練最後部分時,輔助輸出之前的模型是否意圖「不可訓練」? –
嗯,這是一個二元分類模型,所以最終的輸出是(1,)。輔助輸出應該不同嗎?我只是在輔助輸入中添加25個特徵,因此(25,)形狀 – Dataminer
您是否嘗試過更多的時代? –