上一篇 seq2seq 入门 提到了 cho 和 Sutskever 的两篇论文,今天来看一下如何用 keras 建立 seq2seq。
第一个 LSTM 为 Encoder,只在序列结束时输出一个语义向量,所以其 “return_sequences” 参数设置为 “False”
使用 “RepeatVector” 将 Encoder 的输出(最后一个 time step)复制 N 份作为 Decoder 的 N 次输入
第二个 LSTM 为 Decoder, 因为在每一个 time step 都输出,所以其 “return_sequences” 参数设置为 “True”
from keras.models import Sequential
from keras.layers.recurrent import LSTM
from keras.layers.wrappers import TimeDistributed
from keras.layers.core import Dense, RepeatVector
def build_model(input_size, max_out_seq_len, hidden_size):
model = Sequential()
# Encoder(第一个 LSTM) model.add( LSTM(input_dim=input_size, output_dim=hidden_size, return_sequences=False) )
model.add( Dense(hidden_size, activation="relu") )
# 使用 "RepeatVector" 将 Encoder 的输出(最后一个 time step)复制 N 份作为 Decoder 的 N 次输入
model.add( RepeatVector(max_out_seq_len) )
# D