美文网首页
tensorflow 二维矩阵乘以三维矩阵,高维矩阵相乘

tensorflow 二维矩阵乘以三维矩阵,高维矩阵相乘

作者: 风就吹吧 | 来源:发表于2020-01-07 15:47 被阅读0次

最近看论文时看到了一个让我费解的操作。
二维矩阵 * 三维矩阵 * 二维矩阵 得到了一个二维矩阵。
即:

(n * c1) x (m * c1 * c2) x (n * c2) 得 n * m

实现主要参考的是tensorflow的matmul运算对于高维矩阵的乘法支持batch的操作,只要保证高维矩阵最后两维之前的维度一样就可以。直接上例子比较直观。

import tensorflow as tf
g = tf.Graph()
with g.as_default():
    x = tf.ones([2, 3, 1], dtype=tf.float32)
    y = tf.ones([2, 1, 4], dtype=tf.float32)
    z = tf.matmul(x, y)

    p = tf.ones([2, 3, 1, 5], dtype=tf.float32)
    q = tf.ones([2, 3, 5, 6], dtype=tf.float32)
    r = tf.matmul(p, q)


with tf.compat.v1.Session(graph=g) as sess:
    print(sess.run(z).shape)  # (2, 3, 4)
    print(sess.run(r).shape)  # (2, 3, 1, 6)

比较让我震惊的是在tensorflow2.0版本可以按下面计算,当然这样计算比较符合理想化结果,例子中就是300个二维矩阵分别跟一个二维矩阵去乘。
numpy和torch也是支持这样计算的,但是numpy的结果的维度有所不同。

import tensorflow as tf
g = tf.Graph()
with g.as_default():
    a = tf.ones([2, 3], dtype=tf.float32)
    b = tf.ones([300, 3, 6], dtype=tf.float32)
    d = tf.matmul(a, b)  # (300,2,6),这一步2.0版本能够运行令人费解

    d = tf.transpose(d, [1, 0, 2])  # d:(2,300,6)
    c = tf.ones([2, 6, 1], dtype=tf.float32)  # 原本c应该是(2,6)

    e = tf.matmul(d, c)  # e:(2,300,1)
    e = tf.reshape(e, [2, 300])

with tf.compat.v1.Session(graph=g) as sess:
    print(sess.run(e).shape)
    # print(sess.run(d).shape)

tensorflow1.0版本不可以按上述计算,在第一个matmul的时候必须要将b reshape一下,具体计算可以参考:
https://blog.csdn.net/weixin_41024483/article/details/88536662

相关文章

  • tensorflow 二维矩阵乘以三维矩阵,高维矩阵相乘

    最近看论文时看到了一个让我费解的操作。二维矩阵 * 三维矩阵 * 二维矩阵 得到了一个二维矩阵。即: (n * c...

  • numpy 零散记录

    1.关于矩阵转置 ‘.T’ 只对一二维矩阵有用 ‘transpose’ 对高维矩阵的一二维进行转置,三维以上不变(...

  • 2018-07-20-pytroch小知识

    1. 将多个二维矩阵与一个二维矩阵相乘得到多个二维矩阵 In numpy, when i have a 3D te...

  • 高维矩阵(张量)的乘法规则

    高维矩阵指维度≥3的矩阵,或者叫张量。高维矩阵的乘法本质上还是二维矩阵之间的乘法,即把最后两个维度看成矩阵,执行二...

  • 矩阵

    矩阵乘法:行乘列。 前一个矩阵行等于后一个矩阵列的两矩阵可相乘,结果为前项列乘以后项行矩阵。

  • python之数组

    python中,一维数组被打印成行,二维数组成矩阵,三维数组成矩阵列表。 一维是行,横着延伸;(里层for) 二维...

  • torch向量/矩阵维度填充

    达达 一、针对二维矩阵 所需库函数 填充pad,在后面填充2个0 二、针对三维矩阵 所需库函数 初始化矩阵 填充,...

  • 矩阵

    1. 线性方程组 2. 矩阵定义 3. 矩阵运算 矩阵的加法矩阵的加法 数与矩阵相乘数与矩阵相乘 矩阵与矩阵相乘矩...

  • 一种快速计算三维矩阵中一个点到其余点距离的变换矩阵的方法

    需求: 要快速获取一个三维矩阵中某个点到其余点的距离矩阵。 分析: 在二维矩阵中我们可以通过分解坐标,分别对每个坐...

  • Tensorflow快餐教程(3)- 向量

    摘要:Tensorflow向量操作 向量 向量在编程语言中就是最常用的一维数组。 二维数组叫做矩阵,三维以上叫做张...

网友评论

      本文标题:tensorflow 二维矩阵乘以三维矩阵,高维矩阵相乘

      本文链接:https://www.haomeiwen.com/subject/wzgractx.html