P5 PyTorch 常用数学运算

news2024/11/15 21:31:10

前言:

      这里主要介绍一下PyTorch 的常用数学运算

   

目录:

   1: add|sub 加减法

    2:   mul/div  乘/除运算

    3:   矩阵乘法

    4    2D矩阵转置

    5  其它常用数学运算

    6  clamp 梯度剪裁

一  加减法

      1.1 加法

   可以直接通过符号+ 或者 torch.add 

# -*- coding: utf-8 -*-
"""
Created on Tue Dec 20 20:24:10 2022

@author: cxf
"""
import torch

def add():
    
    a = torch.tensor([[1.0,2.0,3.0,4.0],
                     [1.0,2.0,3.0,4.0],
                     [1.0,2.0,3.0,4.0]])
    
    
    b = torch.tensor([3.0,2.0,1.0,-4.0])
    
    
    c = torch.add(a,b)
    
    print(c)
    
    
if __name__ == "__main__":
    add()
    

 a的shape [3,4]

 b 的shape[4] 先做broadcasting 插入一个维度后,做行复制

然后相加,结果为

1.2 减法

   

# -*- coding: utf-8 -*-
"""
Created on Tue Dec 20 20:24:10 2022

@author: cxf
"""
import torch

def sub():
    
    a = torch.tensor([[1.0,2.0,3.0,4.0],
                     [1.0,2.0,3.0,4.0],
                     [1.0,2.0,3.0,4.0]])
    
    
    b = torch.tensor([3.0,2.0,1.0,-4.0])
    
    
    c = torch.sub(a,b)
    
    d = a -b
    
    
    
    print(torch.all(torch.eq(c,d)))
    
    
if __name__ == "__main__":
    sub()
    

 一种用符号 - 或者 用api  torch.sub 

输出:


二   乘/除运算

    2.1 乘

            可以通过符号* 或者mul

# -*- coding: utf-8 -*-
"""
Created on Tue Dec 20 20:24:10 2022

@author: cxf
"""
import torch

def mul():
    
    a = torch.tensor([[1.0,2.0,3.0,4.0],
                     [1.0,2.0,3.0,4.0],
                     [1.0,2.0,3.0,4.0]])
    
    
    b = torch.tensor([1.0,0.5,1.0,0.25])
    
    
    c = torch.mul(a,b)
    
    d = a*b
    
    
    
    print(torch.all(torch.eq(c,d)))
    print(c)
    
    
if __name__ == "__main__":
    mul()

对应点位置相乘,输出如下

 2.2 除

   

def divide():
    
    a = torch.tensor([[1.0,2.0,3.0,4.0],
                     [1.0,2.0,3.0,4.0],
                     [1.0,2.0,3.0,4.0]])
    
    
    b = torch.tensor([1.0,2.0,3.0,4.0])
    
    
    c = torch.div(a,b)
    
    d = a/b
    
    
    
    print(torch.all(torch.eq(c,d)))
    print(c)

b 做broadcast(插入一个维度后 变成[1,4] 然后做行复制)     

输出:

# -*- coding: utf-8 -*-
"""
Created on Tue Dec 20 20:24:10 2022

@author: cxf
"""
import torch

def mat():
    
    a = torch.tensor([[1.0,2.0],
                      [1.0,2.0]])
    
    b = torch.tensor([1.0,0.5]) #[2]
    b = b.unsqueeze(1) #[2,1]
    c = torch.mm(a,b)
    
    print("\n 矩阵2D 相乘:\n ",c.numpy())

三  矩阵乘法

    3.1 mm  2D 向量相乘

           

"""
Created on Tue Dec 20 20:24:10 2022

@author: cxf
"""
import torch

def mat():
    
    a = torch.tensor([[1.0,2.0],
                      [1.0,2.0]])
    
    b = torch.tensor([1.0,0.5]) #[2]
    b = b.unsqueeze(1) #[2,1]
    c = torch.mm(a,b)
    
    print("\n 矩阵2D 相乘:\n ",c.numpy())
    
    
if __name__ == "__main__":
    mat()
    

输出:

 2.2 matmul

      这种是最常用的推荐方法,多多维度的张量,依然只取最后两维做2D mm,其它的维度保持不变

    c = torch.matmul(a, b)

    

 

2.3 @

    重载符号,实现matmul 功能

     c = a@b


四  2D 矩阵转置

   

def mat():
    
    a = torch.tensor([[1,1,1],
                      [2,2,2]])
    
    b = torch.tensor([[1,1,1],
                      [1,2,2]])
    
    c= a@b.t()
    
    print(c)

  当多维向量的时候,使用的transpose

  


五  常用的数学符号

     pow  #平方

     rsqrt  #平方根

    exp  指数运算

     log  对数运算

     floor  向下取整

     ceil   向上取整

     trunc  取整

    round  四舍五入


六   clamp  梯度剪裁

  在深度学习中,网络层次比较深的时候,有的时候为了防止梯度爆炸,或者梯度消失

需要做梯度剪裁,抑制过大过小的值。

# -*- coding: utf-8 -*-
"""
Created on Mon Dec 19 17:24:41 2022

@author: chengxf2
"""

import numpy 
import torch

def clamp():
    
    grad = torch.rand(3,3)*10
    
  
    
    print("\n 梯度 ",grad)
    
    new_grad1 = grad.clamp(5.0)
    
    new_grad2 = grad.clamp(0,5)
    
    print("\n 梯度1 ",new_grad1)
    print("\n 梯度2 ",new_grad2)
    
    
    
clamp()

输出:

        

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

并发编程学习(五):设计模式~同步模式之保护性暂停

1、保护性暂停 模式的定义 保护性暂停 即Guarded Suspension,用于在一个线程等待另一个线程的执行结果。 要点: 有一个结果需要从一个线程传递到另一个线程,让它们关联同一个对象GuardedObject。如果有结果不断从一个线程到另一个线程&…

Redis架构演变之主从、Sentinel哨兵、Cluster(通信、分片、路由等机制)

一. 主从复制 1. 含义 在分布式系统中,为了解决单点问题,通常会把数据复制多个副本到其它机器,满足故障恢复和负载均衡等要求,Redis也是如此,提供了主从复制功能。(redis第一代架构) 实质&…

程序员35岁就失业了吗?就没有其他路可以选了吗?

前言 回到老家最近感到很迷茫,不知道该做什么,也不知道学习了更多的技术又能干什么。 有句话确实是很符合我现在的处境:时势造英雄!虽然我不是英雄,但是我确实需要一个鞥一展所长的环境。 记得当初决定回到哈尔滨&a…

【大话设计模式】工厂+策略+装饰模式 hw01

背景 小李已经是一个工作一年的初级工程师了,他所在的公司是一家大型购物商场。随着各种网络购物软件兴起,老板也想做一个商场的购物 APP。分给小李的是一个一个订单结算模块,需要支持各种不同的结算策略。 需求 请帮小李写一个订单结算模…

vm2 <3.9.10 存在任意代码执行漏洞

漏洞描述 vm2 是一个基于 Node.js 的沙箱环境,可以使用列入白名单的 Node 内置模块运行不受信任的代码。 vm2 3.9.10之前版本中由于 WeakMap.prototype.set 方法使用原型查找从而存在任意代码执行漏洞,攻击者可利用此漏洞在沙箱内执行任意恶意代码&…

盲盒抽奖流程

盲盒模块的流程大致如下: 进入盲盒抽奖页面,需要初始化直接获取一些盲盒的信息,例如:盲盒活动id,开奖buff等。首先需要获取盲盒活动id,后面的所有请求都是基于盲盒活动id进行的。 初始化获取: 盲盒活动id…

Thymeleaf 下拉列表传值示例

参考资料 Spring Boot で Thymeleaf 使い方メモ 目录一. 前期准备二. 实体类.内部类设置下拉列表值2.1 form实体类2.2 Controller层2.3 Thymeleaf页面三. request.setAttribute()设置下拉列表值3.1 定义下拉列表存放类3.2 Controller层3.3 Thymeleaf页面一. 前期准备 枚举类 …

FT2232作为JTAG烧录器的使用步骤详解

FT2232作为JTAG烧录器的使用步骤详解FT2232作为JTAG烧录器的使用步骤详解配置OpenOCD环境(已经配置好的可以跳过)【步骤 1】安装 FT2232HL 芯片的驱动,安装文件为 CDM21228_Setup.exe。【步骤 2】 安装 FT_Prog_v3.6.88.402 Installer.exe【步骤 3】 使用 FT Prog 软…

模型实战一之YOLOv7实例分割、模型寻来自己数据集

模型实战一之YOLOv7实例分割、模型训练自己数据集 1.环境准备 下载yolov7实例分割模型: git clone https://github.com/WongKinYiu/yolov7.git -b mask yolov7-maskcd yolov7-mask安装环境 #查看已安装环境 conda info --envs #查看安装了哪些包 conda list#创建…

神奇的线性表(链表)

目录 神马是链表 链表的分类 单向链表 链表的常用操作 查找操作 插入操作 删除操作 链表与数组 数组的插入 数组的删除 链表的应用 尾声 神马是链表 记得很久很久以前…我们学习过数组, 数组是在内存中一段连续的存储空间, 可以在常数时间内访…

逻辑分析仪解析SPI数据

工具为梦源逻辑分析仪,本次测试的是ST7789v屏幕驱动 接线方面一共需要三根线(MOSI,SCL,GND) SCL PA5 MOSI PA7 DSView上位机配置 通道按照接线选择,这个一定要对应上 COPL CPOH按照SPI实际配置来&#x…

生成模型(四):扩散模型(Diffusion Models)

本文大纲如下: 生成模型种类 到目前为止,我已经写了三种类型的生成模型,[[生成模型-GAN]]、[[生成模型-VAE]]和[[生成模型-Flow based model]]。 它们在生成高质量样本方面显示出巨大的成功,但每一种都有其自身的一些局限性。下…

基于Python的GUI图形用户界面编程

【无限嚣张(菜菜)】:hello您好,我是菜菜,很高兴您能来访我的博客,我是一名爱好编程学习研究的菜菜,每天分享自己的学习,想法,博客来源与自己的学习项目以及编程中遇到问题…

非零基础自学Golang 第17章 HTTP编程(上) 17.2 HTTP客户端 17.2.4 发起POST请求

非零基础自学Golang 文章目录非零基础自学Golang第17章 HTTP编程(上)17.2 HTTP客户端17.2.4 发起POST请求第17章 HTTP编程(上) 17.2 HTTP客户端 17.2.4 发起POST请求 在上一小节我们使用了http.NewRequest来创建一个请求,http.NewRequest有三个参数,第…

web前端-javascript-String字符串的相关方法

文章目录字符串的相关方法1. 底层字符串保存2. 方法1) length 属性 获取长度2) charAt() 获取指定字符3) chartCodeAt() 获取指定字符编码4) String.formCharCode() 根据编码获取字符5) concat() 连接字符串6) indexOf() 是否含有指定内容7) lastIndexOf() 是否含有指定内容8) …

哈斯机床联网

一、设备信息确认 1、确认型号 哈斯的数控面板共有两种情况。 老版本: 新版本: 注:老版本通讯为串口,新版本通讯为网口。 2、确认通讯接口 1、数控面板的后面 老版本的串口一般都会引出在正后面的左侧位置,上面有…

结构型模式之代理模式(八)

常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法、抽象工厂、单例、建造者、原型结构型模式7种:适配器、代理、桥接、装饰者、外观、享元、组合行为型模式11种:模板方法、解释器、策略、观察者、迭代…

非零基础自学Golang 第15章 Go命令行工具 15.5 代码测试(test) 15.5.1 单元测试

非零基础自学Golang 文章目录非零基础自学Golang第15章 Go命令行工具15.5 代码测试(test)15.5.1 单元测试第15章 Go命令行工具 15.5 代码测试(test) go test命令用于对Go语言编写的代码包进行测试。 可以指定要测试的文件,也可以直接对整个包进行测试&#xff0c…

[Java实战]Squaretest单元测试生成利器...一天生成所有简单单元测试...[新手开箱可用]

Squaretest单元测试生成利器...一天生成所有简单单元测试...[新手开箱可用]1.Squaretest是什么?2.如何配合JUnit使用...?3.生成的java文件长啥样?4.如何生成和使用?5.如何用生成的XXXTest.java文件进行单元测试...6.观察结果7.单元测试成功8.源码地址为了好好写单元测试,提…

Dell inspiron 7580硬件升级_更换电池加内存条移动硬盘

文章目录前言硬件升级确认硬件型号参数拆机验证硬件更新后记前言 手上的笔记本[Dell inspiron 7580]用了几年了,还是刚上大学的时候买的,现在感觉这个配置用起来有点吃力了,稍微更新一下配置准备再战两年┭┮﹏┭┮ Light em up, light em u…