当前位置: 首页 > news >正文

Pytorch-----(6)

一 、问题

      如何计算基于不同变量的操作如矩阵乘法。

二、具体实现

      0.4版本以前,张量是包裹在变量之中的,后者有三个属性grad、volatile和 requires_grad属性。(grad 就是梯度属性,requires_grad属性就是 是否需要存储梯度,volatile=True是Variable的另一个重要的标识,它能够将所有依赖它的节点全部设为volatile=True,其优先级比requires_grad=True高。因而volatile=True的节点不会求导,即使requires_grad=True,也不会进行反向传播,对于不需要反向传播的情景(inference,测试推断)(从0.4起, Variable 正式合并入Tensor, Variable 本来实现的自动微分功能,Tensor就能支持。读者还是可以使用Variable(tensor), 但是这个操作其实什么都没做。建议读者以后直接使用tensor。)

      代码:

z = Variable(torch.Tensor(4, 4).uniform_(-5, 5))  #生成一个4×4 的均匀分布产生的张量;print(z)tensor([[-0.3071, -3.6691, -2.8417, -1.1818],
[-1.4654, -0.4344, -2.0130, -2.3842],
[ 1.3962, 1.4962, -2.0996, 1.8881],
[-1.9797, 0.2337, -1.0308, 0.1266]])print('Requires Gradient : %s ' % (z.requires_grad))
print('Volatile : %s ' % (z.volatile))
print('Gradient : %s ' % (z.grad))
print(z.data)Requires Gradient : False
Volatile : False
Gradient : None
tensor([[-0.3071, -3.6691, -2.8417, -1.1818],
[-1.4654, -0.4344, -2.0130, -2.3842],
[ 1.3962, 1.4962, -2.0996, 1.8881],
[-1.9797, 0.2337, -1.0308, 0.1266]])

   三、问题2

          如何基于变量计算如矩阵—向量、矩阵—矩阵以及向量—向量计算呢?

   四、实现方式

          首要的条件是张量的长度或形状必须匹配,才能进行矩阵基础的运算;标量的张量定义就是一个数字,1D张量就是向量,2D张量就是矩阵。n维度矩阵时,就可以归纳为张量。在pytorch中进行代数计算时,矩阵和向量或标量的维度必须匹配。

#张量操作
mat1 = torch.FloatTensor(4,4).uniform_(0,1)
mat1
tensor([[0.9002, 0.9188, 0.1386, 0.3701], [0.1947, 0.2268, 0.9587, 0.2615], [0.7256, 0.7673, 0.5667, 0.1863], [0.4642, 0.4016, 0.9981, 0.8452]])
mat2 = torch.FloatTensor(4,4).uniform_(0,1)
mat2
tensor([[0.4962, 0.4947, 0.8344, 0.6721], [0.1182, 0.5997, 0.8990, 0.8252], [0.1466, 0.1093, 0.8135, 0.9047], [0.2486, 0.1873, 0.6159, 0.2471]])
vec1 = torch.FloatTensor(4).uniform_(0,1)
vec1
tensor([0.7582, 0.6879, 0.8949, 0.3995])# 标量加法
mat1 + 10.5
tensor([[11.4002, 11.4188, 10.6386, 10.8701], [10.6947, 10.7268, 11.4587, 10.7615], [11.2256, 11.2673, 11.0667, 10.6863], [10.9642, 10.9016, 11.4981, 11.3452]])# 标量减法
mat2 - 0.20tensor([[ 0.2962, 0.2947, 0.6344, 0.4721], [-0.0818, 0.3997, 0.6990, 0.6252], [-0.0534, -0.0907, 0.6135, 0.7047], [ 0.0486, -0.0127, 0.4159, 0.0471]])# 向量和矩阵加法mat1 + vec1
tensor([[1.6584, 1.6067, 1.0335, 0.7695], [0.9530, 0.9147, 1.8537, 0.6610], [1.4839, 1.4553, 1.4616, 0.5858], [1.2224, 1.0895, 1.8931, 1.2446]])mat2 + vec1
tensor([[1.2544, 1.1826, 1.7293, 1.0716], [0.8764, 1.2876, 1.7939, 1.2247], [0.9049, 0.7972, 1.7084, 1.3042], [1.0068, 0.8752, 1.5108, 0.6466]])# 如果矩阵维度不同 则不适合矩阵加法和乘法。如果矩阵维度一样,则可以相乘。
“@表示常规的数学上定义的矩阵相乘;*表示两个矩阵对应位置处的两个元素相乘。”
In the following script, the matrix addition throws an error when you multiply similar dimensions—mat1 with mat1. You get relevant results.# matrix-matrix addition
mat1 + mat2
tensor([[1.3963, 1.4135, 0.9730, 1.0422], [0.3129, 0.8265, 1.8577, 1.0867], [0.8722, 0.8766, 1.3802, 1.0910], [0.7127, 0.5888, 1.6141, 1.0923]])
mat1 * mat1
tensor([[0.8103, 0.8442, 0.0192, 0.1370], [0.0379, 0.0514, 0.9192, 0.0684], [0.5265, 0.5888, 0.3211, 0.0347], [0.2155, 0.1613, 0.9963, 0.7143]])

    

      

http://www.lryc.cn/news/388247.html

相关文章:

  • leetcode hot100 第三题:最长连续序列(Java)
  • 利用Jaspar进行转录因子结合位点预测
  • Ubuntu添加系统字体
  • 深度学习相关概念及术语总结2
  • 基于改进滑模、经典滑模、最优滑模控制的永磁同步电机调速系统MATLAB仿真
  • windows环境下创建python虚拟环境
  • Fragment切换没变化?解决办法在这里
  • Linux系统防火墙iptables(下)
  • 你需要精益管理咨询公司的N+1个理由
  • [机器学习]-3 万字话清从传统神经网络到深度学习
  • 网络安全等级保护2.0(等保2.0)全面解析
  • 用Lobe Chat部署本地化, 搭建AI聊天机器人
  • 基于ARM的通用的Qt移植思路
  • IT专业入门,高考假期预习指南
  • 芯片详解——AD7606C
  • IDEA 编译单个Java文件
  • 人工智能业务分析
  • 随机文本生成器
  • java中输入输出流的继承关系
  • c++应用网络编程之一基本介绍
  • Web后端开发概述环境搭建项目创建servlet生命周期
  • Java 位运算详解
  • 智能体实战:开发一个集成国内AI平台的GPTs,自媒体高效智能助手
  • 完美世界|单机版合集(共22个版本)
  • Jenkins的一些记录
  • 讲讲js中的prototype和__proto__
  • JavaScript的学习之DOM的查询(一)
  • 充电宝哪个品牌比较好一点?多维度实测西圣、绿联、倍思充电宝!
  • ubuntu安装QT
  • DataGrip 2024 po for Mac 数据库管理工具解