Pytorch Tensor基本数学运算详解


Posted in Python onDecember 30, 2019

1. 加法运算

示例代码:

import torch
 
# 这两个Tensor加减乘除会对b自动进行Broadcasting
a = torch.rand(3, 4)
b = torch.rand(4)
 
c1 = a + b
c2 = torch.add(a, b)
print(c1.shape, c2.shape)
print(torch.all(torch.eq(c1, c2)))

输出结果:

torch.Size([3, 4]) torch.Size([3, 4])
tensor(1, dtype=torch.uint8)

2. 减法运算

示例代码:

a = torch.rand(3, 4)
b = torch.rand(4)
 
c1 = a - b
c2 = torch.sub(a, b)
print(c1.shape, c2.shape)
print(torch.all(torch.eq(c1, c2)))

输出结果:

torch.Size([3, 4]) torch.Size([3, 4])
tensor(1, dtype=torch.uint8)

3. 哈达玛积(element wise,对应元素相乘)

示例代码:

c1 = a * b
c2 = torch.mul(a, b)
print(c1.shape, c2.shape)
print(torch.all(torch.eq(c1, c2)))

输出结果:

torch.Size([3, 4]) torch.Size([3, 4])
tensor(1, dtype=torch.uint8)

4. 除法运算

示例代码:

c1 = a / b
c2 = torch.div(a, b)
print(c1.shape, c2.shape)
print(torch.all(torch.eq(c1, c2)))

输出结果:

torch.Size([3, 4]) torch.Size([3, 4])
tensor(1, dtype=torch.uint8)

5. 矩阵乘法

(1)二维矩阵相乘

二维矩阵乘法运算操作包括torch.mm()、torch.matmul()、@,

示例代码:

import torch
 
a = torch.ones(2, 1)
b = torch.ones(1, 2)
print(torch.mm(a, b).shape)
print(torch.matmul(a, b).shape)
print((a @ b).shape)

输出结果:

torch.Size([2, 2])
torch.Size([2, 2])
torch.Size([2, 2])

(2)多维矩阵相乘

对于高维的Tensor(dim>2),定义其矩阵乘法仅在最后的两个维度上,要求前面的维度必须保持一致,就像矩阵的索引一样并且运算操只有torch.matmul()。

示例代码:

c = torch.rand(4, 3, 28, 64)
d = torch.rand(4, 3, 64, 32)
print(torch.matmul(c, d).shape)

输出结果:

torch.Size([4, 3, 28, 32])

注意,在这种情形下的矩阵相乘,前面的"矩阵索引维度"如果符合Broadcasting机制,也会自动做广播,然后相乘。

示例代码:

c = torch.rand(4, 3, 28, 64)
d = torch.rand(4, 1, 64, 32)
print(torch.matmul(c, d).shape)

输出结果:

torch.Size([4, 3, 28, 32])

6. 幂运算

示例代码:

import torch
 
a = torch.full([2, 2], 3)
 
b = a.pow(2) # 也可以a**2
print(b)

输出结果:

tensor([[9., 9.],
    [9., 9.]])

7. 开方运算

示例代码:

c = b.sqrt() # 也可以a**(0.5)
print(c)
 
d = b.rsqrt() # 平方根的倒数
print(d)

输出结果:

tensor([[3., 3.],
    [3., 3.]])
tensor([[0.3333, 0.3333],
    [0.3333, 0.3333]])

8.指数与对数运算

注意log是以自然对数为底数的,以2为底的用log2,以10为底的用log10

示例代码:

import torch
 
a = torch.exp(torch.ones(2, 2)) # 得到2*2的全是e的Tensor
print(a)
print(torch.log(a)) # 取自然对数

输出结果:

tensor([[2.7183, 2.7183],
    [2.7183, 2.7183]])
tensor([[1., 1.],
    [1., 1.]])

9.近似值运算

示例代码:

import torch
 
a = torch.tensor(3.14)
print(a.floor(), a.ceil(), a.trunc(), a.frac()) # 取下,取上,取整数,取小数
b = torch.tensor(3.49)
c = torch.tensor(3.5)
print(b.round(), c.round()) # 四舍五入

输出结果:

tensor(3.) tensor(4.) tensor(3.) tensor(0.1400)
tensor(3.) tensor(4.)

10. 裁剪运算

即对Tensor中的元素进行范围过滤,不符合条件的可以把它变换到范围内部(边界)上,常用于梯度裁剪(gradient clipping),即在发生梯度离散或者梯度爆炸时对梯度的处理,实际使用时可以查看梯度的(L2范数)模来看看需不需要做处理:w.grad.norm(2)。

示例代码:

import torch
 
grad = torch.rand(2, 3) * 15 # 0~15随机生成
print(grad.max(), grad.min(), grad.median()) # 最大值最小值平均值
 
print(grad)
print(grad.clamp(10)) # 最小是10,小于10的都变成10
print(grad.clamp(3, 10)) # 最小是3,小于3的都变成3;最大是10,大于10的都变成10

输出结果:

tensor(14.7400) tensor(1.8522) tensor(10.5734)
tensor([[ 1.8522, 14.7400, 8.2445],
    [13.5520, 10.5734, 12.9756]])
tensor([[10.0000, 14.7400, 10.0000],
    [13.5520, 10.5734, 12.9756]])
tensor([[ 3.0000, 10.0000, 8.2445],
    [10.0000, 10.0000, 10.0000]])

以上这篇Pytorch Tensor基本数学运算详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python对数据库操作
Mar 28 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
利用aardio给python编写图形界面
Aug 21 Python
python学生信息管理系统
Mar 13 Python
对python中使用requests模块参数编码的不同处理方法
May 18 Python
python之验证码生成(gvcode与captcha)
Jan 02 Python
python实现屏保程序(适用于背单词)
Jul 30 Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 Python
Python实现实时数据采集新型冠状病毒数据实例
Feb 04 Python
Python如何使用OS模块调用cmd
Feb 27 Python
python安装读取grib库总结(推荐)
Jun 24 Python
Python如何在bool函数中取值
Sep 21 Python
python垃圾回收机制(GC)原理解析
Dec 30 #Python
利用Python代码实现一键抠背景功能
Dec 29 #Python
如何利用pygame实现简单的五子棋游戏
Dec 29 #Python
Python使用正则实现计算字符串算式
Dec 29 #Python
Django框架教程之中间件MiddleWare浅析
Dec 29 #Python
三个python爬虫项目实例代码
Dec 28 #Python
python scrapy重复执行实现代码详解
Dec 28 #Python
You might like
PHP Class&Object -- 解析PHP实现二叉树
2013/06/25 PHP
跟我学Laravel之视图 & Response
2014/10/15 PHP
PHP中使用curl入门教程
2015/07/02 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
Javascript学习笔记之 对象篇(三) : hasOwnProperty
2014/06/24 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
javascript常用的方法分享
2015/07/01 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
python下MySQLdb用法实例分析
2015/06/08 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
python实现桌面气泡提示功能
2019/07/29 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
集世界奢侈品和设计师品牌的意大利精品买手店:Tessabit
2019/08/17 全球购物
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
致铅球运动员加油稿
2014/02/13 职场文书
比赛口号大全
2014/06/10 职场文书
2014乡镇干部纪律作风整顿思想汇报
2014/09/13 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
小学少先队活动总结
2015/05/08 职场文书
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫