두 개의 열이있는 데이터 세트가 있습니다. 각 열에는 문서 세트가 들어 있습니다. Col A의 문서와 Col B의 문서를 일치시켜야합니다. 이것은 감독 된 분류 문제입니다. 따라서 교육 데이터에는 문서가 일치하는지 여부를 나타내는 라벨 열이 포함됩니다.보조 입력이있는 Keras의 LSTM 모델
이 문제를 해결하기 위해 f1-f25 (2 개의 문서를 비교하여)라는 일련의 기능을 만든 다음이 기능에 대한 바이너리 분류자를 교육했습니다. 이 접근법은 상당히 잘 작동하지만, 이제는이 문제에 대한 Deep Learning 모델 (특히 LSTM 모델)을 평가하고 싶습니다.
저는 파이썬에서 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)
그러나, 나는 같은 확률값을 얻을. 모든 경우 점수. 이 문제는 AUX 입력을 제거 할 때 의미있는 출력을 생성하기 때문에 AUX 입력이 공급되는 방식과 관련이있는 것으로 보입니다. 보조 입력을 네트워크의 다른 위치에 삽입하려고했습니다. 그러나 어떻게 든 나는 이것을 작동시킬 수 없었다.
모든 포인터?
의도적인지는 모르지만 보조 출력은 (1,)뿐입니다. 그것은 당신이 정말로 기대하는 것입니까? 하나의 결과로 25 개의 보조 입력을 병합 하시겠습니까? - 최종 부품 만 훈련하는 동안 보조 출력이 "훈련 할 수 없도록"하기 전에 모델이 있습니까? –
음. 이것은 바이너리 분류 모델이므로 최종 출력은 (1,)입니다. 보조 출력이 달라야합니까? 나는 단순히 보조 입력으로 25 가지 기능의 additonal 세트를 먹이기 때문에 (25,) 모양 – Dataminer
더 많은 신기원을 사용해 보셨습니까? –