tf.matmul

矩阵乘法

tf.matmul

矩阵乘法-维基百科

理解矩阵乘法 - 阮一峰的网络日志

当A是个 4×2 矩阵和B是个 2×3 矩阵时。分别来自两个矩阵的元素都依箭头方向而两两配对,把每一对中的两个元素相乘,再把这些乘积加总起来,最后得到的值即为箭头相交位置的值。

矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有定义。一般单指矩阵乘积时,指的便是一般矩阵乘积。若A为 m*n 矩阵,B为 n*p 矩阵,则他们的乘积AB(有时记做A · B)会是一个 m*p 矩阵。

# 2-D
with tf.Session() as sess:
    a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3])
    # [[1 2 3]
    #  [4 5 6]]
    print(sess.run(a))

    b = tf.constant([7, 8, 9, 10, 11, 12], shape=[3, 2])
    # [[ 7  8]
    #   [ 9 10]
    #   [11 12]]
    print(sess.run(b))
    c = tf.matmul(a, b)
    # [[ 58  64]
    #  [139 154]]

    # 1*7+2*9+3*11=58
    # 1*8+2*10+3*12=64
    # 4*7+5*9+6*11=139
    # 4*8+5*10+6*12=154
    print(sess.run(c))
# 3-D
import numpy as np
with tf.Session() as sess:
   a = tf.constant(np.arange(1, 13, dtype=np.int32),
                    shape=[2, 2, 3])
    # [[[1.  2.  3.]
    #   [4.  5.  6.]],
    # [[7.  8.  9.]
    #  [10. 11. 12.]]]
    print(sess.run(a))

    b = tf.constant(np.arange(13, 25, dtype=np.int32),
                    shape=[2, 3, 2])
    # [[[13. 14.]
    #   [15. 16.]
    #   [17. 18.]],
    #  [[19. 20.]
    #   [21. 22.]
    #   [23. 24.]]]
    print(sess.run(b))

    c = tf.matmul(a, b)
    # [[[94 100]
    #   [229 244]],
    #  [[508 532]
    #   [697 730]]]

    # 1*13+2*15+3*17=94
    # 1*14+2*16+3*18=100
    # 4*13+5*15+6*17=229
    # 4*14+5*16+6*18=244
    # 7*19+8*21+9*23=508
    # 7*20+8*22+9*24=532
    # 10*19+11*21+12*23=697
    # 10*20+11*22+12*24=730
    print(sess.run(c))

Python3.5之后支持新的语法 @

# Since python >= 3.5 the @ operator is supported (see PEP 465).
# In TensorFlow, it simply calls the `tf.matmul()` function, so the
# following lines are equivalent:
d = a @ b @ [[10.], [11.]]
d = tf.matmul(tf.matmul(a, b), [[10.], [11.]])
posted @ 2017-11-09 07:18  guqiangjs  阅读(1761)  评论(0编辑  收藏  举报