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 (1)
Oct 31 Python
Python Mysql自动备份脚本
Jul 14 Python
详谈python http长连接客户端
Jun 12 Python
python 绘制拟合曲线并加指定点标识的实现
Jul 10 Python
pytorch打印网络结构的实例
Aug 19 Python
python 使用pdfminer3k 读取PDF文档的例子
Aug 27 Python
Tensorflow 多线程设置方式
Feb 06 Python
python 实现多维数组(array)排序
Feb 28 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
Mar 06 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
Jan 29 Python
python numpy中multiply与*及matul 的区别说明
May 26 Python
一些让Python代码简洁的实用技巧总结
Aug 23 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用户指南-cookies部分
2006/10/09 PHP
php date()日期时间函数详解
2010/05/16 PHP
PHP引用符&的用法详细解析
2013/08/22 PHP
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
DOM 高级编程
2015/05/06 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
jQuery获取this当前对象子元素对象的方法
2016/11/29 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
2019/08/07 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
Django查询数据库的性能优化示例代码
2017/09/24 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
社区党员先进事迹
2014/01/22 职场文书
自考毕业自我鉴定
2014/03/18 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
合作经营协议书范本
2014/09/16 职场文书
新闻通讯稿模板
2015/07/22 职场文书
在Django中使用MQTT的方法
2021/05/10 Python
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python
JS函数式编程实现XDM一
2022/06/16 Javascript