Мне не удалось выяснить размеры для архитектуры кодера-декодера 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