Размеры для выходных данных кодера-декодера Keras RNN - PullRequest
0 голосов
/ 28 февраля 2019

Мне не удалось выяснить размеры для архитектуры кодера-декодера RNN.Я понимаю, как работают LSTM, но я изо всех сил пытаюсь реализовать это в Керасе.После просмотра документации и чтения вопросов и ответов выясняется, что размеры выходных данных сети должны соответствовать размерам всего набора целей (вместо конкретной цели - это не имеет смысла).Я уверен, что я прочитал это неправильно, и вместо этого он должен соответствовать размерам только цели для данного XI (оставляя в стороне вопросы о партиях сейчас).После нескольких часов возни я в замешательстве.Я думаю, что тот факт, что я встраиваю входы в RNN и не встраиваю выходы, может иметь к этому какое-то отношение, и мне может понадобиться сплющить сеть где-нибудь по пути.

Вот настройка:

  • Набор данных представляет собой большое количество пар вопросов и ответов.Я работаю с образцом из 1440 пар для построения инфраструктуры.
    • xi: "Какая столица США?"
    • yi: «Я думаю, что столицей является Вашингтон»
  • После НЛП есть два массива - один для X и один для Y. Каждая строка соответствуетстрока в исходном наборе данных, например:
    • Обработано xi: [253, 8, 25, 208, 28, 1]
    • Обработано yi: [827, 10, 25, 208, 8, 198]
  • Существует слой внедрения для входных последовательностей (с использованием алгоритма перчаток), но я не думаю, что это необходимо для выходных последовательностей.

Вот код:

model = Sequential()
model.add(Embedding(vocabulary_size, embed_size, input_length = maxlen, weights=[embedding_matrix]))
model.add(Bidirectional(LSTM(embed_size, return_sequences=True)))
model.add(LSTM(embed_size, return_sequences=True))

if dropout < 1.0:
    model.add(Dropout(dropout))

model.add(TimeDistributed(Dense(embed_size, activation='softmax')))
# model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())

model.fit(X_itrain, y_train, batch_size=32, epochs=1) 

Вот краткий обзор сети:

Layer (type)                 Output Shape              Param #   
embedding_29 (Embedding)     (None, 95, 100)           404600    
bidirectional_12 (Bidirectio (None, 95, 200)           160800    
lstm_45 (LSTM)               (None, 95, 100)           120400    
time_distributed_18 (TimeDis (None, 95, 100)           10100     
Total params: 695,900 Trainable params: 695,900 Non-trainable params:

Вот ошибка:

ValueError: Error when checking target: expected time_distributed_18 to have 3 dimensions, but got array with shape (1440, 95)

Другие детали:

  • maxlen: максимальная длина входных и выходных последовательностей составляет 95
  • embed_size: размерность вложения слова равна 100
  • vocabulary_size: размер словаря4046

1 Ответ

0 голосов
/ 28 февраля 2019

Одна из проблем, с которой вы столкнулись, заключается в том, что вы в настоящее время не строите модель кодер-декодер.В настоящее время вы пытаетесь обучить модель, которая получает вопрос, а затем сразу отвечает на него.Для модели кодера-декодера вам необходимо построить две модели.Первая модель должна отобразить вход в закодированное состояние.И вторая модель должна научиться принимать это закодированное состояние, получить уже отвеченную часть и вернуть вам следующее слово.

Вы можете найти пример кода Keras здесь .

...