我有一个名为x
的一维python列表,其形状为(1000)
,其中包含形状(3, 600)
的张量元素。我还有一个形状w
的张量流变量(600, 1)
,我希望它与x
的每个张量元素相乘。每个操作的结果都是形状张量(3, 1)
。
有没有办法有效地将w
应用于x
的每个元素?使用python循环的逻辑是:
for i in range(1000):
x[i] = tf.matmul(x[i], w)
我已经尝试了以下内容:
w = [w] * 1000
result = tf.mul(x, w)
但是我收到了以下错误:
ValueError: Dimensions must be equal, but are 3 and 600 for 'Mul' (op: 'Mul') with input shapes: [1000,3,600], [1000,600,1]
谢谢!
答案 0 :(得分:0)
使用tf.map_fn查看,该函数沿张量的第一轴映射函数。在你的情况下,你有x是一个形状的张量(1000,3,600)。第一个暗淡是一个列表并不重要。它只会充当张量。
tf.map_fn(lambda x_: tf.matmul(x_, W), x)
您还可以使用tf.batch_matmul操作,如下所示。
tf.batch_matmul(x, [w] * 1000)
但是我会使用tf.tile而不是[w] * 1000