结合验证来训练模型
在这里,您将使用 Teacher Forcing 训练模型,并执行一次验证步骤。您会在多个 epoch 和多次迭代上进行训练。然后在每个 epoch 结束时,运行验证步骤并获取结果。
为此,已为您提供 en_text(英文句子)、fr_text(法文句子)、sents2seqs() 函数以及 nmt_tf(已编译的模型)。同时,训练数据 tr_en 和 tr_fr,以及验证数据 v_en 和 v_fr 也已加载完毕。
本练习是课程的一部分
使用 Keras 的机器翻译
练习说明
- 从
de_xy中提取解码器输入(除最后一个词外的所有词)与解码器输出(除第一个词外的所有词)。 - 在单个批次的数据上训练模型一次。
- 参照训练数据的处理方式,从验证数据中创建解码器输入与输出。
- 在验证数据集上评估模型,获取验证损失和准确率。
交互式实操练习
通过完成这段示例代码来试试这个练习。
for ei in range(n_epochs):
for i in range(0,train_size,bsize):
en_x = sents2seqs('source', tr_en[i:i+bsize], onehot=True, reverse=True)
de_xy = sents2seqs('target', tr_fr[i:i+bsize], onehot=True)
# Create a single batch of decoder inputs and outputs
de_x, de_y = ____[:,____,:], de_xy[:,____,:]
# Train the model on a single batch of data
nmt_tf.____([____,____], de_y)
v_en_x = sents2seqs('source', v_en, onehot=True, reverse=True)
# Create a single batch of validation decoder inputs and outputs
v_de_xy = ____('target', ____, onehot=____)
v_de_x, v_de_y = ____[____], v_de_xy[____]
# Evaluate the trained model on the validation data
res = nmt_tf.evaluate([____,____], ____, batch_size=valid_size, verbose=0)
print("{} => Loss:{}, Val Acc: {}".format(ei+1,res[0], res[1]*100.0))