如何在reduce_xxxtensorflow操作中屏蔽向量?

如何在reduce_xxxtensorflow操作中屏蔽向量?,tensorflow,Tensorflow,设X为某张量,其第一维度未知(批量大小),第二维度和第三维度已知,n,m。假设Y是相同尺寸的张量,它是X的遮罩,即对于批次中的每个样本,它包含1,其中X[b,n,m]包含真值,而0只是填充 我想根据掩码对X的行/列运行摘要操作。也就是说,如果X的某个样本的某行n从某个点n_0开始包含零,我不希望计算中包含它 虽然我可以为诸如reduce\u mean或reduce\u min之类的操作手动解决此问题,但我不能使用reduce\u prod例如,如果矩阵被零填充 有没有一种方法可以使用向量掩码执行

X
为某张量,其第一维度未知(批量大小),第二维度和第三维度已知,
n,m
。假设
Y
是相同尺寸的张量,它是
X
的遮罩,即对于批次中的每个样本,它包含
1
,其中
X[b,n,m]
包含真值,而
0
只是填充

我想根据掩码对
X
的行/列运行摘要操作。也就是说,如果
X
的某个样本的某行
n
从某个点
n_0
开始包含零,我不希望计算中包含它

虽然我可以为诸如
reduce\u mean
reduce\u min
之类的操作手动解决此问题,但我不能使用
reduce\u prod
例如,如果矩阵被零填充

有没有一种方法可以使用向量掩码执行
reduce_XXX
类型的Tensorflow操作


谢谢。

您可以使用动态分区,使用掩码值将数据分成两个张量

data = tf.constant([0, 1, 2, 3])
mask = tf.cast(data>0, tf.int32)
bad_data, good_data = tf.dynamic_partition(data, mask, 2)
sess.run(tf.reduce_prod(good_data))

问题在于tf.dynamic\u partition和tf.boolean\u mask会在其他维度(例如,在批处理大小中)展平向量。否则就不行了,因为张量必须是“alligned box”,但您通常希望对每个样本分别运行reduce_XXX。你能修复它吗?一些操作只支持平面张量,解决方案通常需要某种形式的组合,包括重塑、应用一些操作和重塑背面