精华内容
下载资源
问答
  • tensorflow高维度张量相乘

    千次阅读 2019-07-14 13:30:19
    高维度张量相乘通过tf.reshape()对高维度张量降维,验证高维度张量相乘结果 通过tf.reshape()对高维度张量降维,验证高维度张量相乘结果 最近遇到了需要将高于2维度的张量相乘的需求,通过互联网资源查到了先用tf....

    通过tf.reshape()对高维度张量降维,验证高维度张量相乘结果

    最近遇到了需要将高于2维度的张量相乘的需求,通过互联网资源查到了先用tf.reshape()降到2维再运算的骚操作。下面验证这种操作的可靠性。

    #测试多维矩阵乘法。问题来自于mul-attention模型的矩阵运算
    #2019-7-14编辑
    import tensorflow as tf
    import numpy as np
    
    #定义两个三维矩阵
    #k.shape = [batch_size, seq_length, embedded_size]
    #w.shape = [embedded_size, d_k, h_num]
    k = tf.Variable(tf.random_uniform([3, 4, 5]))
    w = tf.Variable(tf.random_uniform([5, 6, 7]))
    
    #实现k与w的相乘,目标维度为[batch_size, seq_length, d_k, h_num]
    #通过reshape的方式,将矩阵降到2维,实现矩阵乘法,再通过reshape还原
    k_2d = tf.reshape(k, [-1, 5])
    w_2d = tf.reshape(w, [5, -1])
    r_2d = tf.matmul(k_2d, w_2d)
    r_4d = tf.reshape(r_2d, [-1, 4, 6, 7])
    
    #运算结果
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        r_untested = sess.run(r_4d)
        k_3d, w_3d = sess.run([k, w])
    
    print(np.dot(k_3d[0,:,:],w_3d[:,:,0]))
    #array([[0.68616796, 1.147416  , 1.2250627 , 1.0267124 , 0.5699807 ,
            0.65192497],
           [1.2962847 , 0.63438064, 1.7439795 , 1.2534602 , 0.8585079 ,
            0.9535629 ],
           [1.0780972 , 1.466816  , 1.623834  , 1.4493611 , 0.9913111 ,
            1.1141219 ],
           [0.6155605 , 1.0016347 , 0.95043844, 0.8071648 , 0.6317205 ,
            0.8374078 ]], dtype=float32)
    print(r_untested[0,:,:,0])
    #array([[0.68616796, 1.147416  , 1.2250627 , 1.0267124 , 0.5699807 ,
            0.65192497],
           [1.2962846 , 0.6343807 , 1.7439795 , 1.2534602 , 0.8585079 ,
            0.9535629 ],
           [1.0780972 , 1.4668161 , 1.623834  , 1.449361  , 0.9913111 ,
            1.1141219 ],
           [0.6155604 , 1.0016347 , 0.95043844, 0.8071648 , 0.6317204 ,
            0.8374078 ]], dtype=float32)
    
    

    最终发现结果相同,大胆的用吧

    展开全文
  • torch.matmul() 张量相乘

    2021-04-14 09:10:15
    如果是二维的矩阵相乘,那就跟平时咱们做的矩阵乘法一样: a = torch.tensor([[1,2], [3,4]]) a Out[31]: tensor([[1, 2], [3, 4]]) b = torch.tensor([[2,2], [3,4]]) b Out[33]: tensor([[2, 2], [3, 4]])...

    如果是二维的矩阵相乘,那就跟平时咱们做的矩阵乘法一样:

    a = torch.tensor([[1,2], [3,4]])
    
    a
    Out[31]: 
    tensor([[1, 2],
            [3, 4]])
            
    b = torch.tensor([[2,2], [3,4]])
    
    b
    Out[33]: 
    tensor([[2, 2],
            [3, 4]])
            
    torch.matmul(a, b)
    Out[34]: 
    tensor([[ 8, 10],
            [18, 22]])
            
    torch.matmul(a, b).shape
    Out[35]: torch.Size([2, 2])
    
    

    如果维度更高呢?前面的维度必须要相同,然后最里面的两个维度符合矩阵相乘的形状限制:i×jj×k。

    a = torch.tensor([[[1,2], [3,4], [5,6]],[[7,8], [9,10], [11,12]]])
    
    a
    Out[37]: 
    tensor([[[ 1,  2],
             [ 3,  4],
             [ 5,  6]],
            [[ 7,  8],
             [ 9, 10],
             [11, 12]]])
             
    a.shape
    Out[38]: torch.Size([2, 3, 2])
    
    b = torch.tensor([[[1,2], [3,4]],[[7,8], [9,10]]])
    b
    Out[40]: 
    tensor([[[ 1,  2],
             [ 3,  4]],
            [[ 7,  8],
             [ 9, 10]]])
             
    b.shape
    Out[41]: torch.Size([2, 2, 2])
    
    torch.matmul(a, b)
    Out[42]: 
    tensor([[[  7,  10],
             [ 15,  22],
             [ 23,  34]],
            [[121, 136],
             [153, 172],
             [185, 208]]])
    
    # a 和 b 的最外面的维度都是 2,相同。
    # 最里面两个维度分别是 3 × 2 和 2 × 2,那么乘完以后就是 3 × 2
    torch.matmul(a, b).shape
    Out[43]: torch.Size([2, 3, 2])
    

    这里举一个例子,在某一篇论文的代码中,作者使用matmul的场景。

    简单地说,就是用过matmul()函数实现

    假设有下面这么一个矩阵,shape为[batch_size, 1, seq_len],该矩阵的含义是,最里面的每一个[]seqlen[]_{seq_len}表示一个句子的序列,如果元素为1,则表示该下标可以作为subject的head index。并且在每一行中,只有一个1。也就是只有一个subject的head index。

    现在有另外一个矩阵,shape为[batch_size, seq_len, bert_dim]。该矩阵的含义是整个batch的text([batch_size, seq_len])经过经过bert encoder之后得到的。

    根据前面说的,二者相乘,得到的shape是[batch_size, 1, bert_dim]。

    比如第一行 [0,1,0,....0,0]×bertencode=[0.3,0.1,...,0][0,1,0,....0,0]×bert encode之后的矩阵=[0.3, 0.1, ..., 0]

    最后得到的是subject在bert encode之后的空间中look up,或者说嵌入以后的向量。

    在这里插入图片描述

    展开全文
  • 两个维度不同的张量相乘

    千次阅读 2018-04-11 10:57:29
    context_vector = math_ops .reduce _sum( array_ops .reshape (attn_dist, [batch_size, - 1 , 1 , 1 ]) * encoder_state, [ 1 , 2 ...相乘结果为: (batch_size, attn_length, 1, attn_size)
    context_vector = math_ops.reduce_sum(
                  array_ops.reshape(attn_dist, [batch_size, -1, 1, 1]) * encoder_state, [1, 2])  # shape (batch_size, attn_size).

    encoder_state: (batch_size, attn_length, 1, attn_size)
    array_ops.reshape(attn_dist, [batch_size, -1, 1, 1]): (batch_size, attn_length, 1, 1)

    相乘结果为: (batch_size, attn_length, 1, attn_size)

    展开全文
  • https://blog.csdn.net/lanlana168/article/details/81136907 tensor二维与三维如何相加
    展开全文
  • Torch张量对应点乘、相乘

    万次阅读 2019-03-30 20:25:53
    1.张量点乘, z = x.mul(y) ,维度相同 2.张量相乘, z = x.mm(y) , (m,n) x (n,p)
  • matlab三维张量按页相乘 matlab里对三维张量来说,按页加减,点乘点除都是支持的,但按页做矩阵乘法不行。 定义函数: function y = newtimes(x,y) [mx,nx,p] = size(x); [ny,py,q] = size(y); x1 = reshape...
  • 张量相乘在深度学习中经常遇到,这里我们简单介绍一下numpy和tensorflow中的张量相乘。 1、对于维数一样的张量相乘。A.shape =(b,m,n), B.shape = (b,n,k). numpy.matmul(A,B) 结果shape为(b,m,k) 这里要求第一...
  • 张量的数学计算

    2020-12-01 16:28:20
    文章目录1 计算函数及说明2 计算方法及代码2.1 张量相加2.2 张量相乘2.3 取自然对数2.4 计算张量指定维度上的总和2.5 按片段对张量进行求和 1 计算函数及说明 2 计算方法及代码 2.1 张量相加 按元素相加 x = tf....
  • 复杂的神经网络本质上就是各种张量相乘、相加等基本运算操作的组合。 一、数据类型   TensorFlow中的基本数据类型:数值类型,字符串类型和布尔类型。 1.1 数值类型   数值类型的张量是TensorFlow的主要数据载体...
  • //整理byRobinKin//Blitz++张量计算的示例/******************************************************************************matmult.cppBlitz++tensornotationexample**********...
  • '''tensor乘以标量数值''' y=torch.mul(x,value) #或者 y=x.mul(value) '''一维张量乘以一维张量''' # x.shape=torch([m]).y....'''二维张量相乘''' # x.shape=torch([m,n]),y.shape=torch([n,d]),z.shape=torch(
  • 矩阵相乘,转置,求逆,张量积(直积)C#代码
  • TensorFlow是一个面向深度学习算法的科学计算库,TensorFlow内部数据保存在张量(tensor)对象上。TensorFlow使用tensor 数据结构来表示所有的...复杂的神经网络本质上就是各种张量相乘、相加等基本运算操作的组合。Te...
  • 有两个张量工作正常.变量和标量工作正常.但是当尝试使用变量和张量执行逐元素乘法时,我得到:XXXXXXXXXXX in mulassert not torch.is_tensor(other)AssertionError例如,运行以下内容时:import torchx_ten...
  • 原文: http://cs231n.stanford.edu/vecDerivs.pdf本文让大家更好地学习使用向量、矩阵和高阶张量的求导。1 简化,简化再简化很多关于数组的求导的困惑来自于一次性想做太多事。这些事包括同时对多个部分求导,和式...
  • 下面我们探讨矩阵张量积所蕴含的意义。将域 上的 维方矩阵(phalanx)的集合记为 ,矩阵张量积的计算如下:[余扬政1998] 物理学中的几何方法后面将看到,矩阵的张量积可以不限于方矩阵。Hermite内积的张量表示回顾一个...
  • 序言在初阶理论 [東雲正樹:物理人的张量运算 / 爱因斯坦求和? 何为矩阵? 为何这样乘? 什么是张量? 什么又是线性空间?] 中, 我们介绍了矢量空间, 对偶矢量空间, 张量的概念与重复指标求和约定(也称之为上下重复指标...
  • 下面我们探讨矩阵张量积所蕴含的意义。将域 上的 维方矩阵(phalanx)的集合记为 ,矩阵张量积的计算如下:[余扬政1998] 物理学中的几何方法后面将看到,矩阵的张量积可以不限于方矩阵。Hermite内积的张量表示回顾一个...
  • 标量、向量、矩阵、张量。标量(scalar)。一个标量,一个单独的数。其他大部分对象是多个数的数组。斜体表示标量。小写变量名称。明确标量数类型。实数标量,令s∊ℝ表示一条线斜率。自然数标量,令n∊ℕ表示元素数目...
  • 张量学习(7):张量乘积

    千次阅读 2020-11-21 10:15:58
    将三个向量相乘: 其作用是:大大地降低了参数的维度。(将一个十二维的矩阵换为三个小维度的矩阵) 2.张量内积 已知两个张量: 和 则两个张量的内积可以表示为: 3.张量积(直积) 张量积(积张量):有两个...
  • 标量、向量、矩阵、张量。 标量(scalar)。一个标量,一个单独的数。其他大部分对象是多个数的数组。斜体表示标量。小写变量名称。明确标量数类型。实数标量,令s∊ℝ表示一条线斜率。自然数标量,令n∊ℕ表示元素...
  • 首先我们先以一张图看看张量、标量、向量和矩阵的整体区别。先贴上结果:最重要的:列表、一维数组、一维向量都默认是n行1列的列向量(列矩阵). A = [[1,3,4,5,6]]是二维数组,1行5列张量是泛化的概念,广义上包含...
  • 我在Tensorflow中有两个张量,它们有以下两种形状:print(tf.valid_dataset.get_shape())print(weights1.get_shape())有结果:(10000, 784)(784, 1024)但是,如果我试图将它们相乘,就像这样:tf.matmul(tf_valid_...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 243
精华内容 97
关键字:

张量相乘