(8-2-01)TensorFlow注意力机制实战: Tensorflow机器翻译系统(1)

8.2.1  项目介绍

实例8-1:Tensorflow使用注意力机制实现翻译系统(源码路径:daima\8\attention1.ipynb)

本实例的实现文件是nmt_with_attention.ipynb,在ipynb笔记本文件中训练模型后,如果输入一个西班牙语句子,例如:

 ¿todavia estan en casa?

则会返回对应英文翻译:

“are you still at home? ”

我们将训练生成的模型导出为tf.saved_model,因为这样可以在其他 TensorFlow 环境中使用。在完成翻译工作的同时,需要生成对应的注意力图,在途中这显示输入句子的哪些部分在翻译时引起了模型的注意。如图7-3所示。

图7-3  生成的注意力图

在编码之前先通过如下命令安装tensorflow_text:

pip install tensorflow_text

从头开始构建几个层,如果想在自定义层和内置层之间实现切换,请设置使用如下变量:

use_builtins = True

编写形状检查器类ShapeChecker,如果文件类型不符合要求则进行修复,具体实现代码如下所示。

class ShapeChecker():
  def __init__(self):
    # 对看到的每个轴名称进行缓存
    self.shapes = {}
 
  def __call__(self, tensor, names, broadcast=False):
    if not tf.executing_eagerly():
      return
 
    if isinstance(names, str):
      names = (names,)
 
    shape = tf.shape(tensor)
    rank = tf.rank(tensor)
 
    if rank != len(names):
      raise ValueError(f'Rank mismatch:\n'
                       f'    found {rank}: {shape.numpy()}\n'
                       f'    expected {len(names)}: {names}\n')
 
    for i, name in enumerate(names):
      if isinstance(name, int):
        old_dim = name
      else:
        old_dim = self.shapes.get(name, None)
      new_dim = shape[i]
 
      if (broadcast and new_dim == 1):
        continue
 
      if old_dim is None:
        # 如果轴名称为新名称,则需要将其长度添加到缓存中.
        self.shapes[name] = new_dim
        continue
 
      if new_dim != old_dim:
        raise ValueError(f"Shape mismatch for dimension: '{name}'\n"
                         f"    found: {new_dim}\n"
                         f"    expected: {old_dim}\n")
未完待续
  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值