定義解碼器(decoder)
在這個練習中,你將實作解碼器,並定義一個從編碼器輸入到解碼器 GRU 輸出的端到端模型。解碼器與編碼器使用相同的模型結構,但在輸入與狀態的提供方式上有所不同。舉例來說,解碼器會同時使用編碼器產生的語境向量(context vector)作為輸入,以及作為解碼器的初始狀態。請記得,我們會用前綴 en(例如 en_gru)代表與編碼器相關的物件,用 de 代表與解碼器相關的物件(例如 de_gru)。
為了實作解碼器,你將使用 RepeatVector 與 GRU 層。
本練習已提供你先前實作好的編碼器模型與各個層。例如,編碼器的輸入為 en_inputs,語境向量為 en_state。另外請注意,GRU 與 Model 物件已經匯入可用。
本練習屬於課程
使用 Keras 進行機器翻譯
練習說明
- 定義一個
RepeatVector層,將en_state作為輸入,並將其重複fr_len次。 - 定義一個名為
decoder_gru的 GRU 層,其隱藏單元數為hsize,並回傳所有產生的輸出。 - 將
de_inputs作為輸入、en_state作為解碼器的初始狀態,取得decoder_gru層的輸出。 - 定義一個模型,以
en_inputs為輸入、gru_outputs為輸出。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
from tensorflow.keras.layers import RepeatVector
hsize = 48
fr_len = 20
# Define a RepeatVector layer
de_inputs = ____(____)(____)
# Define a GRU model that returns all outputs
decoder_gru = ____(____, ____=____)
# Get the outputs of the decoder
gru_outputs = ____(____, initial_state=____)
# Define a model with the correct inputs and outputs
enc_dec = ____(inputs=____, outputs=____)
enc_dec.summary()