定義嵌入式模型
你將定義一個 Keras 模型,該模型:
- 使用
Embedding層 - 會以 Teacher Forcing 方式訓練
這個模型會有兩個嵌入層:一個編碼器的嵌入層,以及一個解碼器的嵌入層。除此之外,因為模型是使用 Teacher Forcing 來訓練,所以在解碼器的 Input 層會使用長度為 fr_len-1 的序列。
在本練習中,你已匯入所有需要的 keras.layers 與 Model。此外,變數 en_len(英文序列長度)、fr_len(法文序列長度)、en_vocab(英文詞彙量)、fr_vocab(法文詞彙量)以及 hsize(隱藏層大小)都已經定義好。
本練習屬於課程
使用 Keras 進行機器翻譯
練習說明
- 定義一個可接受單字 ID 序列的
Input層。 - 定義一個
Embedding層,可嵌入en_vocab個單字,嵌入向量長度為 96,並可接受一組 ID 序列(使用input_length參數指定序列長度)。 - 定義一個
Embedding層,可嵌入fr_vocab個單字,嵌入向量長度為 96,並可接受長度為fr_len-1的 ID 序列。 - 定義一個模型,依序從編碼器與解碼器取得輸入(順序為先編碼器、再解碼器),並輸出單字預測結果。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Define an input layer which accepts a sequence of word IDs
en_inputs = Input(____=(____,))
# Define an Embedding layer which accepts en_inputs
en_emb = ____(____, ____, input_length=____)(en_inputs)
en_out, en_state = GRU(hsize, return_state=True)(en_emb)
de_inputs = Input(shape=(fr_len-1,))
# Define an Embedding layer which accepts de_inputs
de_emb = Embedding(____, 96, input_length=____)(____)
de_out, _ = GRU(hsize, return_sequences=True, return_state=True)(de_emb, initial_state=en_state)
de_pred = TimeDistributed(Dense(fr_vocab, activation='softmax'))(de_out)
# Define the Model which accepts encoder/decoder inputs and outputs predictions
nmt_emb = Model([____, ____], ____)
nmt_emb.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])