张量流:使用矩阵对载体进行多重化

时间:2018-05-28 10:09:59

标签: tensorflow

我有一个向量x = <C elements>。我想用矩阵Z = <C x C elements>对它进行多重处理。这将给出<1xC>矩阵(<C>向量)的输出。 如果我只为每个样本提供一个样本,我可以将它们相乘。

但在培训期间,我有张量x = <NxC>Z = <NxCxC>,其中'N'是我的小批量大小。在这种情况下如何实现上述计算。普通tf.matmul()返回错误,抱怨维度。 ValueError: Shape must be rank 2 but is rank 3 for 'Channel/MatMul' (op: 'MatMul') with input shapes: [?,2], [?,2,2].

谢谢,

Vishnu Raj

1 个答案:

答案 0 :(得分:0)

这是一种方法:

  1. 展开张量x的最后一个维度。它的形状现在是(N, C)

  2. 将张量Zx与广播相乘。结果张量的形状为(N, C, C)

  3. 对张量的最后一个维度求和。

  4. 例如:

    import tensorflow as tf
    
    N = 2
    C = 3
    
    Z = tf.ones((N, C, C))  # Shape=(N, C, C)
    x = tf.reshape(tf.range(0, N*C, dtype=tf.float32), shape=(N, C))  # Shape=(N, C)
    mul = tf.reduce_sum(Z * x[:, :, None], axis=-1)  # Shape=(N, C)
    
    with tf.Session() as sess:
        print(sess.run(mul))