Tensorflow 实现常见mask

一、self-attention中的mask

1.1 attention的mask.

1.1.1 举例

q_mask = [1, 1, 1, 1, 0, 0]  # seq_len. 其中1表示有效, 0表示无效. 

# self-attention的score为 [seq_len, seq_len]

q_mask = tf.expand_dims(q_mask, axis=-1)  # [seq_len, 1]
k_mask = tf.reshape(q_mask, [1, -1])  # [1, seq_len] 
attention_mask = tf.matmul(q_mask, k_mask)   # [seq_len, seq_len]

1.1.2 调用

import tensorflow as tf

q_mask = tf.expand_dims(tf.constant([1, 1, 1, 1, 0, 0]), axis=-1)      # seq_len, 1
k_mask = tf.reshape(q_mask, [1, -1])   # 1, seq_len
output = tf.matmul(q_mask, k_mask)


with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

    print_output = sess.run([output])
    print(print_output)

# [[1, 1, 1, 1, 0, 0],
#  [1, 1, 1, 1, 0, 0],
#  [1, 1, 1, 1, 0, 0],
#  [1, 1, 1, 1, 0, 0],
#  [0, 0, 0, 0, 0, 0],
#  [0, 0, 0, 0, 0, 0]]

二、序列mask

1.1 tf.sequence_mask

1.1.1 函数参数

tf.sequence_mask(
    lengths, maxlen=None, dtype=tf.dtypes.bool, name=None
)

1.1.2 调用

tf.sequence_mask([1, 3, 2], 5)  # [[True, False, False, False, False],
                                #  [True, True, True, False, False],
                                #  [True, True, False, False, False]]

tf.sequence_mask([1, 3, 2], 5, dtype=tf.int64)
								# [[1 0 0 0 0]
								#  [1 1 1 0 0]
                                #  [1 1 0 0 0]]

tf.sequence_mask([[1, 3],[2,0]])  # [[[True, False, False],
                                  #   [True, True, True]],
                                  #  [[True, True, False],
                                  #   [False, False, False]]

由此可以得知:padding部分的mask是False, 有效部分的mask是True。
如果指定dtype=int64, 那么输出也便是如此。

三、decoder中的attention mask

1.1 下三角mask

保证一个词只能看到前面的词语,看不到后面的词。

import tensorflow as tf

q_len, k_len = 5, 5
mask = tf.ones(shape=[q_len, k_len])                       
tril = tf.linalg.LinearOperatorLowerTriangular(mask).to_dense()


with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

    print_output = sess.run([tril])
    print(print_output)

[[1., 0., 0., 0., 0.],
 [1., 1., 0., 0., 0.],
 [1., 1., 1., 0., 0.],
 [1., 1., 1., 1., 0.],
 [1., 1., 1., 1., 1.]]
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mask RCNN的部署可以分为两个方面: 1. 模型部署 将训练好的模型部署到生产环境中,可选的方式包括: - TensorFlow Serving: TensorFlow Serving是一个高性能,灵活的服务系统,用于在生产环境中部署机器学习模型。可以将训练好的Mask RCNN模型保存为TensorFlow格式,然后使用TensorFlow Serving进行部署和服务。 - ONNX Runtime: ONNX Runtime是一个高性能推理引擎,支持多种硬件和操作系统,可以将训练好的Mask RCNN模型保存为ONNX格式,然后使用ONNX Runtime进行部署和服务。 - TensorFlow Lite: TensorFlow Lite是一个适用于移动和嵌入式设备的轻量级机器学习框架,可以将训练好的Mask RCNN模型转换为TensorFlow Lite格式,然后在移动设备上进行部署和服务。 2. 数据预处理和后处理 在模型部署之前,需要对输入数据进行预处理,以满足模型的输入要求。在模型推理之后,需要对模型输出进行后处理,以得到最终的目标检测和分割结果。常见的数据预处理和后处理包括: - 图像预处理:包括图像缩放、归一化、裁剪等操作,以满足模型的输入要求。 - 目标框后处理:包括目标框解码、非极大值抑制(NMS)等操作,以得到最终的目标检测结果。 - 掩模后处理:包括掩模解码、掩模二值化、掩模填充等操作,以得到最终的目标分割结果。 以上的预处理和后处理操作可以使用Python和OpenCV等库进行实现,也可以使用TensorFlow和ONNX Runtime等推理引擎的API进行实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值