Keras Seq2Seq Введение
Введение Keras в модель Seq2Seq было опубликовано несколько недель назад, и его можно найти здесь. Я не очень понимаю одну часть этого кода:
decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True)
decoder_outputs, _, _= decoder_lstm(decoder_inputs,initial_state=encoder_states)
decoder_dense = Dense(num_decoder_tokens, activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)
Здесь decoder_lstm
определено. Это слой измерения latent_dim
, Мы используем состояния кодера как initial_state для декодера.
Я не понимаю, почему после слоя LSTM добавляется плотный слой и почему он работает? Декодер должен вернуть всю последовательность из-за return_sequences = True
Так как же возможно, что после добавления плотного слоя?
Я думаю, что я что-то здесь упускаю.
1 ответ
Хотя в общих случаях используются 2D данные (batch,dim)
в качестве входных данных для плотных слоев, в новых версиях Keras вы можете использовать трехмерные данные (batch,timesteps,dim)
,
Если вы не сгладите эти 3D-данные, ваш плотный слой будет вести себя так, как если бы он применялся к каждому временному шагу. И вы получите выходные данные, как (batch,timesteps,dense_units)
Вы можете проверить эти две маленькие модели ниже и убедиться, что независимо от временных шагов оба плотных слоя имеют одинаковое количество параметров, показывая, что его параметры подходят только для последнего измерения.
from keras.layers import *
from keras.models import Model
import keras.backend as K
#model with time steps
inp = Input((7,12))
out = Dense(5)(inp)
model = Model(inp,out)
model.summary()
#model without time steps
inp2 = Input((12,))
out2 = Dense(5)(inp2)
model2 = Model(inp2,out2)
model2.summary()
Результат покажет 65 (12*5 + 5) параметров в обоих случаях.