P6 PyTorch 常用数学运算

news2024/11/8 15:02:02

前言:

      这里主要介绍一下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/108582.html

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

相关文章

MySQL数据库的安装、创建库及连接取数

安装MySQL数据库MySQL数据库简介安装MySQL数据库下载安装包安装MySQLMySQL创建一个新的数据库,并在其中创建新的数据表,填充测试数据并查看mysql>模式下输入的每句sql语句都要以;结尾;若多行语句无;,则被默认为一条语句未输入完…

UNIX环境高级编程——1.UNIX基础知识

UNIX基础知识 UNIX体系结构 严格意义上来说,可以将操作系统定义为一种软件,控制计算机硬件资源,提供程序运行环境。通常把这种软件成为内核。内核的接口被成为系统调用(system call)。公共函数库构建在系统调用接口之…

碳酸锂、碳酸氢锂除钙镁离子交换柱

锂及其盐类是国民经济和国防建设中具有重要意义的战略物资,也是与人们生活息息相关的能源材料。而碳酸锂作为锂盐的基础盐,是制取锂化合物和金属锂的原料,可作铝冶炼的电解浴添加剂,亦可用于合成橡胶、染料、半导体等方面。电池级…

Orin+ GMSL (Ser 9295+Des 9296)流程分析(1)

文章目录 1 前言2 流程分析2.1 整体架构2.2 Ser端2.2 Des端2.3 软件架构2.4 设备树文件分析2.5 VI 接口2.7 CSI 接口1 前言 Maxim 支持GMSL作为汽车行业视频应用的通信链路。GMSL基于SerDes (Serializer-Deserializer)技术;也就是说,它在发送端使用序列化器,在接收端使用反序…

观察UE4中引用查看器(ReferenceViewer)是从哪得到数据的

前言 引用查看器(ReferenceViewer)可以显示资源引用关系数据,我想要知道这个数据是如何得到的。因此从它的界面代码开始一步步往里看。 (到最后才发现,得到引用关系数据的接口很简单,而且是蓝图可访问的,详见本篇的【…

冬至已至,你的在职读研2023能在社科院与杜兰大学金融管理硕士项目实现吗

杜甫《小至》中写道“天时人事日相催,冬至阳生春又来”。不知不觉间冬至悄然到来,过完冬至天气日渐回暖,春天即将回来了。时光总是匆匆而逝,一晃2022年将要与我们说再见了。这一年来,反复无常的疫情,瞬息万…

【学习笔记】JDK源码学习之HashTable(附带面试题)

【学习笔记】JDK源码学习之HashTable(附带面试题) 其他好文: 【学习笔记】JDK源码学习之LinkedHashMap(附带面试题【学习笔记】JDK源码学习之HashMap(附带面试题)【学习笔记】JDK源码学习之Vector(附带面试题&#x…

OpenCV基础入门

主要了解包括 opencv 的下载和环境配置opencv目录的了解opencv中highgui模块opencv中core模块opencv中imgproc模块opencv中feature2d模块opencv视频操作 1.OpenCV简介 图像是人类视觉的基础,是自然景物的客观反映。 模拟图像通过某种物理量的强弱变化来记录图像…

中小企业远程办公指南:10分钟搭建,即插即用

不装了 我成小阳人了 虽然还没算过来人,但是想要提醒一下小伙伴“能不阳就别阳”,“能晚阳就晚阳”! 真的很痛很难受。 为了应对即将到来的高峰,我们在上周末紧急采取了远程居家办公模式。 不得不说,公司应对突发情…

彻底卸载2345王牌输入法的方法

2345王牌输入法是2345公司旗下一款中文输入法软件,主打纯净输入,有用户用了一段时间觉得不太习惯,就想卸载装别的软件,但是发现怎么也卸不掉,下面小编就给大家介绍彻底卸载2345王牌输入法的方法。 方法一:使…

线性代数 --- Gauss消元的部分主元法和完全主元法(补充)

Gauss消元的部分主元法和完全主元法(补充) 本文主要是对下文的补充,而补充的主要内容就是如何直接求出(手动)部分主元法的P矩阵和L矩阵: 线性代数 --- Gauss消元的部分主元法和完全主元法_松下J27的博客-CSDN博客_高斯消元的主元是什么Gauss消元的部分主…

MyBatisPlus ---- MyBatis-Plus简介

MyBatisPlus ---- MyBatis-Plus简介1. 简介2. 特性3. 支持数据库4. 框架结构1. 简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 愿景: 我们的…

艾美捷内皮血管生成检测试剂盒的多种特点

血管生成(Angiogenesis)是指源于已存在的毛细血管和毛细血管后微静脉的新的毛细血管性血管的生长。内皮血管生成是一个极其复杂的过程。通常新生血管是在原有的血管基础上延伸扩展而形成的,其过程类似于典型的伤口愈合和胚胎形成过程。在血管…

RK3568下载SDK编译源码

前面我们已经搭建好了编译一个环境https://blog.csdn.net/qq_24093081/article/details/128394606 所以在这里我们就需要下载瑞芯微提供的SDK进行编译,由于RK3568支持多种系统,比如Android11,Linux(debian、Ubuntu、buildroot、yo…

TCP网络编程

1. 网络相关概念 网络通信:两台设备之间通过网络实现数据传输;java.net包下提供了一系列的类或接口,完成网络通信; 局域网:覆盖一个学校、单位、公司; 城域网:覆盖一个城市; 广域网…

力扣(15.18)补9.19

15.三数之和 我以为不会太难,md不会。 其实很让我惊讶的是,双指针用了2层循环但复杂度确是O(n)。牛🐮🐮🐮🐮🐮🐮🐮🐮🐮&am…

自动控制原理笔记-结构图及其等效变换

目录 结构图: 得到系统结构图的两种方式 : 方框图画结构图: 微分方程组画结构图: 结构图等效变换规则: 结构图的化简: 小结: 结构图: 得到系统结构图的两种方式 &#xff1a…

WebMagic

1.介绍 WebMagic是一款简单灵活的爬虫框架。基于它你可以很容易的编写一个爬虫。 WebMagic由四个组件(Downloader、PageProcessor、Scheduler、Pipeline)构成,核心代码非常简单,主要是将这些组件结合并完成多线程的任务。这意味着,在WebMag…

K8S——存储ConfigMap

configMap描述信息 ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。 ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保…

hutool工具并发使用 Sftp sftp = new Sftp(sshHost, sshPort, sshUser, sshPass) 的坑

目录问题描述解决方案Sftp(sshHost, sshPort, sshUser, sshPass) 分析Sftp(Session session) 分析吐槽另外还有一坑 delFile(String filePath)问题描述 看到前人的代码中使用 Sftp sftp new Sftp(sshHost, sshPort, sshUser, sshPass) ; 来创建一个Sftp客户端,然后…