利用tf.ragged.boolean_mask完成选择mask压缩tensor

现有如下输入:

1. [Batch_size, Seq_len, N_classes]的tensor T

2. [Batch_size, Seq_len]的mask矩阵 M

需求:根据M中的值来mask T,并去掉被mask掉的值

实际场景:主要是现在有一个对话的每个时刻的状态,和角色(0/1),需要取出角色为1的所有utterances的状态,在此基础上选取最后一个角色为1的utterance的状态

问题点:

若使用tf.boolean_mask,则会得到[?, N_classes], ?代表这个方法将每个样本筛选出来的样本压缩成一维,是一个不规则的维度,?数值小于Batch_size * Seq_len

正确操作:

使用tf.ragged.boolean_mask,保留原始的维度,利用不规则tensor特性,得到S=[Batch_size, ?, N_classes], 再使用tf.squeeze(S[:, :-1,:], 1),得到期望结果

注:Ragged Tensor不支持直接index,所以这里使用slice操作,再压缩中间维度。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值