訓練模型
在這個練習中,你會訓練先前實作的模型。你知道嗎?Google 的編碼器-解碼器式機器翻譯模型需要訓練 2–4 天。
在本練習中,你會使用 1,500 句的較小資料集(也就是 en_text 與 fr_text)來訓練模型。這樣的量很難得到理想效能,不過方法是一樣的;只是需要在更多資料上、訓練更久。你也已經拿到模型 nmt,以及你先前實作的 sents2seqs() 函式。為了得到更好的效能,你會將編碼器的文字反轉。這裡,en_x 代表編碼器輸入,de_x 代表解碼器輸入。
本練習屬於課程
使用 Keras 進行機器翻譯
練習說明
- 使用
sents2seqs()取得一個批次的編碼器輸入(英語句子,索引從i到i+bsize)。輸入需要先反轉並做 onehot 編碼。 - 使用
sents2seqs()取得一個批次的解碼器輸出(法語句子,索引從i到i+bsize)。輸入需要做 onehot 編碼。 - 以包含
en_x與de_y的單一批次資料來訓練模型。 - 以
bsize作為batch_size,評估模型以取得en_x與de_y的評估指標。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
n_epochs, bsize = 3, 250
for ei in range(n_epochs):
for i in range(0,data_size,bsize):
# Get a single batch of encoder inputs
en_x = ____('source', ____, onehot=____, reverse=____)
# Get a single batch of decoder outputs
de_y = sents2seqs('target', fr_text[____], onehot=____)
# Train the model on a single batch of data
nmt.____(____, ____)
# Obtain the eval metrics for the training data
res = nmt.____(____, de_y, batch_size=____, verbose=0)
print("{} => Train Loss:{}, Train Acc: {}".format(ei+1,res[0], res[1]*100.0))