我有向量y
,我也知道y的有用长度len_y
。我也有onehot_y = tf.one_hot(y, n_classes)
,它是y
的唯一代表。
我已经创建了len_y的蒙版。
这是batchsize = 2的示例
mask_y = tf.sequence_mask(len_y)
mask_y = [[True True True True True True True True True],
[True True True True True False False False False]]
因此,从我的第一个元素开始,只有第9个第一个值才有用,而从第二个元素开始,只有第5个第一个值才有用。
如果像y
一样将此掩码应用于tf.boolean_mask(y,mask_y)
,我将得到预期的结果,但是我不知道如何将其应用于onehot_y
,它不会抱怨,但是会给出我扩展了结果。
这就是我要得到的(为了简单起见,将其转换为数值表示,而不是在onehot上):
y = [[0,1,2,3,4,5,6,7,8,9],
[1,11,21,31,41,51,61,71,81,91]]
y_oh_true = tf.boolean_mask(onehot_y, mask_y)
y_oh_true = onehot_of ->[0,1,2,3,4,5,6,7,8,9,1,11,21,31]
我期望的地方:
y_oh_true = onehot_of ->[0,1,2,3,4,5,6,7,8,1,11,21,31,41]
有人知道如何解决此问题吗?
谢谢!
答案 0 :(得分:0)
好了,我在做tf.sequence_mask
时必须指定maxlen
就我而言,要修复它只是:
mask_y = tf.sequence_mask(self.len_y, maxlen=tf.shape(self.y)[1])
。
我不清楚的是,为什么tf.boolean_mask
不会抱怨形状不合适而不是做这种奇怪的事情。