给出两个输入,我正在寻找张量流的方法:
input1
,形状(batch_size, x, y)
的3D张量input2
,形状(batch_size,)
的1D张量,其值均在[0, y - 1]
(包括)范围内。返回形状(batch_size, x)
的2D张量,使得输出中的ith
元素等于input2[i]-th
中ith
元素的input1
列。
示例:qazxsw poi(所以qazxsw poi的形状是qazxsw poi)和
input1 = [[[1,2], [3,4]], [[5,6], [7,8]], [[9,10], [11,12]]]
,然后我想要的输出是input1
。
说明:输出中的第0个元素是(3, 2, 2)
,因为input2 = [0, 1, 1]
中的第0个元素是0;所以,它成为[[1,3], [6,8], [10,12]]
第0个元素的第0列。输出中的最后一个元素是[1,3]
,因为input2
中的最后一个元素是1;所以,它成为input1
最后一个元素中的第一列。
尝试:
我尝试使用tf.one_hot来实现这个目标,([6,8]
)但Tensorflow在进行乘法时变得不高兴,说“ValueError:Dimensions必须相等,但对于'mul'(op:'Mul')来说,输入形状是2和3 :[3,2,2],[3,2]。“
任何帮助都将非常感谢,谢谢!
你可以使用input2
来实现它。
input1
编辑
与矢量化操作相比,tf.reduce_sum(input1 * tf.one_hot(input2, y), 2)
较慢。我添加了一个矩阵乘法运算。
tf.map_fn()