【问题标题】:Multiplication of tensors in a python list with a constant variable in tensorflowpython列表中的张量与张量流中的常量变量相乘
【发布时间】:2016-11-21 10:11:21
【问题描述】:

我有一个名为x 的一维python 列表,其形状为(1000),其中包含形状为(3, 600) 的张量元素。我还有一个形状为(600, 1) 的张量流变量w,我想将它与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]

谢谢!

【问题讨论】:

    标签: matrix tensorflow product


    【解决方案1】:

    研究使用 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

    【讨论】:

    • 谢谢,都成功了!不过tf.batch_matmul 似乎更快。
    • 是的。出于某种原因,尽管我认为它不会广播。您必须平铺第一个暗淡,这有点烦人。
    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多