【问题标题】:Tensorflow: Mulitiplication of a vector with a MatrixTensorflow:向量与矩阵的乘法
【发布时间】:2018-11-06 21:42:48
【问题描述】:

我有一个向量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].

谢谢,

毗湿奴拉吉

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    这是一种方法:

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

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

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

    例如:

    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))
    

    【讨论】:

    • 谢谢,它有效。对于正确的数学,我必须输入axis = 1。
    • 不客气!是的,这是可能的(这取决于您如何定义张量)。如果有用,请记住接受和/或投票。
    猜你喜欢
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2020-03-16
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多