精华内容
下载资源
问答
  • Tensordot broken

    2021-01-12 10:12:06
    return tensordot(x, [1.0, 1.0j], axes=([0], [0])) def bar(x): return sum(x * [1.0, 1.0j]) >>> value_and_grad(foo)(array([1.0, 1.0])) (array(1.+1.j), array([ 1.+1.j, -1.+1....
  • tf.tensordot运算

    万次阅读 多人点赞 2019-08-09 01:05:09
    函数原型:tf.tensordot(a, b, axes) tensordot函数的一个好处是:当a和b的维度不同时,函数也可以正常运行。 举例: 1. import tensorflow as tf a = tf.ones(shape=[2,3,3]) b = tf.ones(shape=[3,2,6]) c ...

    函数原型tf.tensordot(a, b, axes)
    tensordot函数用来进行矩阵相乘,它的一个好处是:当a和b的维度不同时,也可以相乘。

    举例:

    1.

    import tensorflow as tf
    a = tf.ones(shape=[2,3,3])
    b = tf.ones(shape=[3,2,6])
    c = tf.tensordot(a,b, axes=1)
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        #print(sess.run(c))
        print(sess.run(tf.shape(c)))
    

    c的形状为[2,3,2,6],这里axes=1,说明取a的后1维即[3]和b的前1维即[3]进行矩阵相乘,其他维不变,那么根据矩阵乘法,自然得到c的大小为[2,3,2,6]

    2.

    import tensorflow as tf
    a = tf.ones(shape=[2,2,3])
    b = tf.ones(shape=[3,2,6])
    c = tf.tensordot(a,b, axes=2)
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        #print(sess.run(c))
        print(sess.run(tf.shape(c)))
    

    这里c的大小为[2,6],axes=2,即取a的后两维相乘后得到的2*3=6,与b的前两维相乘后得到的3*2=6,进行矩阵相乘运算,即大小为[2,6]的矩阵与大小为[6,6]的矩阵进行矩阵相乘运算,得到的c的大小即为[2,6]。如果a的后两维相乘不等于b的前两维相乘,比如a为[2,2,3],b为[3,3,6],则会报错。

    3.

    import tensorflow as tf
    a = tf.ones(shape=[2,2,3])
    b = tf.ones(shape=[3,2,6])
    c = tf.tensordot(a,b, axes=(1,1))
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        #print(sess.run(c))
        print(sess.run(tf.shape(c)))
    

    如果axes参数是一个元组,则元组的第一维指第一个乘数a要做运算的下标,第二维指第二个乘数要做运算的下标。这里axes=(1,1),也就是说a的第1维与b的第一维进行矩阵相乘。相当于[2,3,2]*[2,3,6],结果c即为[2,3,3,6]。

    4.

    import tensorflow as tf
    a = tf.ones(shape=[2,2,3])
    b = tf.ones(shape=[3,2,6])
    c = tf.tensordot(a,b, axes=((1,2),(0,1)))
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        #print(sess.run(c))
        print(sess.run(tf.shape(c)))
    

    axes同样是元组,这里表明a的第1,2维和b的第0,1维进行矩阵乘法。即[2,2*3] * [3*2,6]= [2,6] * [6,6] = [2,6],c的大小即为[2,6]

    展开全文
  • tf.tensordot用法

    2020-03-06 23:16:24
    函数原型:tf.tensordot(a, b, axes) tensordot函数用来进行矩阵相乘,它的一个好处是:当a和b的维度不同时,也可以相乘。 举例: 1. import tensorflow as tf a = tf.ones(shape=[2,3,3]) b = tf.ones(shape=[3,2,6...

    转载自链接

    函数原型tf.tensordot(a, b, axes)
    tensordot函数用来进行矩阵相乘,它的一个好处是:当a和b的维度不同时,也可以相乘。

    举例:

    1.

    import tensorflow as tf
    a = tf.ones(shape=[2,3,3])
    b = tf.ones(shape=[3,2,6])
    c = tf.tensordot(a,b, axes=1)
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        #print(sess.run(c))
        print(sess.run(tf.shape(c)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    c的形状为[2,3,2,6],这里axes=1,说明取a的后1维即[3]和b的前1维即[3]进行矩阵相乘,其他维不变,那么根据矩阵乘法,自然得到c的大小为[2,3,2,6]

    2.

    import tensorflow as tf
    a = tf.ones(shape=[2,2,3])
    b = tf.ones(shape=[3,2,6])
    c = tf.tensordot(a,b, axes=2)
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        #print(sess.run(c))
        print(sess.run(tf.shape(c)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这里c的大小为[2,6],axes=2,即取a的后两维相乘后得到的2*3=6,与b的前两维相乘后得到的3*2=6,进行矩阵相乘运算,即大小为[2,6]的矩阵与大小为[6,6]的矩阵进行矩阵相乘运算,得到的c的大小即为[2,6]。如果a的后两维相乘不等于b的前两维相乘,比如a为[2,2,3],b为[3,3,6],则会报错。

    3.

    import tensorflow as tf
    a = tf.ones(shape=[2,2,3])
    b = tf.ones(shape=[3,2,6])
    c = tf.tensordot(a,b, axes=(1,1))
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        #print(sess.run(c))
        print(sess.run(tf.shape(c)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    如果axes参数是一个元组,则元组的第一维指第一个乘数a要做运算的下标,第二维指第二个乘数要做运算的下标。这里axes=(1,1),也就是说a的第1维与b的第一维进行矩阵相乘。相当于[2,3,2]*[2,3,6],结果c即为[2,3,3,6]。

    4.

    import tensorflow as tf
    a = tf.ones(shape=[2,2,3])
    b = tf.ones(shape=[3,2,6])
    c = tf.tensordot(a,b, axes=((1,2),(0,1)))
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        #print(sess.run(c))
        print(sess.run(tf.shape(c)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    axes同样是元组,这里表明a的第1,2维和b的第0,1维进行矩阵乘法。即[2,2*3] * [3*2,6]= [2,6] * [6,6] = [2,6],c的大小即为[2,6]

    展开全文
  • tensorflow之tf.tensordot详解

    千次阅读 2019-08-29 20:47:25
    tf.tensordot是tensorflow中tensor矩阵相乘的API,可以进行任意维度的矩阵相乘 (1).tf.tensordot函数详细介绍如下: tf.tensordot( a, b, axes, name=None ) """ Args: a:类型为float32或者float64的tensor b:...

    tf.tensordot是tensorflow中tensor矩阵相乘的API,可以进行任意维度的矩阵相乘

    (1).tf.tensordot函数详细介绍如下:

    tf.tensordot(
        a,
        b,
        axes,
        name=None
    )
    """
    Args:
        a:类型为float32或者float64的tensor
        b:和a有相同的type,即张量同类型,但不要求同维度
        axes:可以为int32,也可以是list,为int32,表示取a的最后几个维度,与b的前面几个维度相乘,再累加求和,消去(收缩)相乘维度
            为list,则是指定a的哪几个维度与b的哪几个维度相乘,消去(收缩)这些相乘的维度
        name:操作命名
    """
    

    (2).代码演示(举四维Tensor与三维Tensor相乘的例子)

    1.获取一个shape=(2,1,3,2)的随机数矩阵a,以及一个shape=(2,3,1)的矩阵b

    import tensorflow as tf
    a = tf.constant([0,1,2,1,3,4,5,2,3,4,5,0],shape=[2,1,3,2])
    b =tf.constant([1,3,2,3,1,2],shape=[2,3,1])
    with tf.Session() as sess:
        print("a的shape:",a.shape)
        print("b的shape:",b.shape)
        print("a的值:",sess.run(a))
        print("b的值:",sess.run(b))
    

    显示结果:

    a的shape: (2, 1, 3, 2)
    b的shape: (2, 3, 1)
    a的值: [[[[0 1]
           [2 1]
           [3 4]]]
         [[[5 2]
           [3 4]
           [5 0]]]]
    b的值: [[[1]
            [3]
            [2]]
           [[3]
            [1]
           [2]]]
    

    2.在axes=1轴上相乘指的是将a的最后一个维度与b的第一个维度矩阵相乘,然后将结果累加求和,消除(收缩)这两个维度,矩阵a,b剩下的维度concat,就是所求矩阵维度

    import tensorflow as tf
    a = tf.constant([0,1,2,1,3,4,5,2,3,4,5,0],shape=[2,1,3,2])
    b =tf.constant([1,3,2,3,1,2],shape=[2,3,1])
    res = tf.tensordot(a,b,axes=1)
    with tf.Session() as sess:
            print("a的shape:",a.shape)
      	    print("b的shape:",b.shape)
            print("res_shape:",res.shape)
            print("res_value:",sess.run(res))
    

    显示结果:

    a的shape: (2, 1, 3, 2)
    b的shape: (2, 3, 1)
    res_shape: (2, 1, 3, 3, 1)
    res_value: [[[[[ 3]
        [ 1]
        [ 2]]
       [[ 5]
        [ 7]
        [ 6]]
       [[15]
        [13]
        [14]]]]
     [[[[11]
        [17]
        [14]]
       [[15]
        [13]
        [14]]
       [[ 5]
        [15]
        [10]]]]]
    

    3.在axes=2轴上相乘指的是将a的最后两个维度与b的前两个维度矩阵相乘,然后将结果累加求和,消除(收缩)这四个维度,矩阵a,b剩下的维度concat,就是所求矩阵维度

    import tensorflow as tf
    a = tf.constant([0,1,2,1,3,4,5,2,3,4,5,0],shape=[2,1,3,2])
    b =tf.constant([1,3,2,3,1,2],shape=[2,3,1])
    res = tf.tensordot(a,b,axes=2)
    with tf.Session() as sess:
            print("a的shape:",a.shape)
      	    print("b的shape:",b.shape)
            print("res_shape:",res.shape)
            print("res_value:",sess.run(res))
    

    显示结果:

    a的shape: (2, 1, 3, 2)
    b的shape: (2, 3, 1)
    res_shape: (2, 1, 1)
    res_value: [[[21]]
    	    [[34]]]
    

    4.在axes=[[1,3],[0,2]]上进行tensor相乘,指的是将a的第一个维度、第三个维度concat的维度与b的第0(维度下标从0开始)个维度、第二个维度concat的维度进行矩阵相乘,然后将结果累加求和,消除(收缩)这四个维度,矩阵a,b剩下的维度concat,就是所求矩阵维度

    import tensorflow as tf
    a = tf.constant([0,1,2,1,3,4,5,2,3,4,5,0],shape=[2,1,3,2])
    b =tf.constant([1,3,2,3,1,2],shape=[2,3,1])
    res = tf.tensordot(a,b,axes=[[1,3],[0,2]])
    with tf.Session() as sess:
            print("a的shape:",a.shape)
      	    print("b的shape:",b.shape)
            print("res_shape:",res.shape)
            print("res_value:",sess.run(res))
    

    显示结果:

    a的shape: (2, 1, 3, 2)
    b的shape: (2, 3, 1)
    res_shape: (2, 3, 3)
    res_value: [[[ 3  1  2]
    	     [ 5  7  6]
    	      [15 13 14]]
    	     [[11 17 14]
    	      [15 13 14]
    	      [ 5 15 10]]]
    
    展开全文
  • 在使用Numpy或者TensorFlow的tensordot方法进行矩阵相乘的时候,axes是一个重要的参数,它可以定义两个矩阵互乘的时候是使用内积、外积、或是其他方法。不管Numpy还是TensorFlow,它们使用tensordot的axes参数的方法...
  • numpy—np.tensordot

    2021-02-26 17:45:21
    numpy.tensordot(a, b, axes=2) 描述 沿指定的轴计算张量点积 参数 a, b : array_like 张量 axes :int or (2,) array_like 如果为整数,则按顺序,对a的最后N个轴和b的前N个轴求和。相应轴的尺寸必须匹配 如果...

    np.tensordot

    numpy.tensordot(a, b, axes=2)
    

    描述

    沿指定的轴计算张量点积

    参数

    a, b : array_like
    张量
    axes :int or (2,) array_like
    如果为整数,则按顺序,对a的最后N个轴和b的前N个轴求和。相应轴的尺寸必须匹配
    如果为两个array,则为要求和的轴列表,第一个序列适用于a,第二个序列适用于b。
    两个元素array_like必须具有相同的长度。元素array_like里的元素代表序列a、b要删除的轴(见案例2)
    输出:输入张量的点积

    Note
    在这里插入图片描述

    1.案例1

    在这里插入图片描述

    2.案例2

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • tensordot 的源码解读

    2020-10-16 21:11:29
    我一直以为,谈论数学计算只能用数学语言,就是用数学公式一步步推导 import numpy as np np.random.seed(10) A = np.random.randint(0,9,(3,4,2)) ...C=np.tensordot(A, B, [(1,2), (0,1)]) print('C=',C) print('#
  • np.tensordot 的理解和使用

    千次阅读 多人点赞 2019-05-15 10:20:49
    Numpy是使用最广的科学计算库,对于多维数组的操作更是在实践中用的最多,而且也是比较困惑的地方,但是用好了事半功倍,今天讲一下Tensordot的使用,这个函数在卷积神经网络的卷积中用到。 数组的属性 数组维度、...
  • PyTorch 中的 tensordot 以及 einsum 函数介绍 前言 最近发现这两个函数用得越来越频繁, 比如在 DCN 网络的实现中就用到了(详见 Deep Cross Network (深度交叉网络, DCN) 介绍与代码分析), 但是过段时间又忘记这两个...
  • tf.tensordot运算(转)

    2020-08-23 22:15:24
    函数原型:tf.tensordot(a, b, axes)tensordot函数用来进行矩阵相乘,它的一个好处是:当a和b的维度不同时,也可以相乘。 举例: 1. import tensorflow as tf a = tf.ones(shape=[2,3,3]...
  • https://numpy.org/doc/stable/reference/generated/numpy.tensordot.html 文档说的过于晦涩,下面以实际例子来研究一下 样例1 axis=0 (叉乘运算) m1=np.array([0.1,0.2,0.3, 0.4,0.5,0.6]) m2=np.array([-0.1, ...
  • 1.例子 import tensorflow as tf a = tf.constant([0,1,2,1,3,4,5,2,3,...res = tf.tensordot(a,b,axes=1) with tf.Session() as sess: print(“a的shape:”,a.shape) print(“b的shape:”,b.shape) print(“a的值:”,s
  • 3. tf.tensordot 1. tf.multiply tf.multiply 等同与 * ,用于计算矩阵之间的 element-wise 乘法,要求矩阵的形状必须一致(或者是其中一个维度为1),否则会报错。 import tensorflow as tf a = tf.constant(...
  • 警告:贴纸由SyntaxDot 继承,它支持许多新功能:多任务学习。预训练的 Transformer 模型,例如 BERT 和 XLM-R。除了作为序列标签解析之外,还进行双仿射解析。词形还原。贴纸贴纸是使用神经网络的序列标记器。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 578
精华内容 231
关键字:

tensordot