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实现本地图片转存并重命名的示例代码
Oct 27 Python
Python 从相对路径下import的方法
Dec 04 Python
python 多维高斯分布数据生成方式
Dec 09 Python
python基于celery实现异步任务周期任务定时任务
Dec 30 Python
python误差棒图errorbar()函数实例解析
Feb 11 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
python实现输入三角形边长自动作图求面积案例
Apr 12 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
Python高并发解决方案实现过程详解
Jul 31 Python
浅析python 通⽤爬⾍和聚焦爬⾍
Sep 28 Python
python3 hdf5文件 遍历代码
May 19 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
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
python脚本实现xls(xlsx)转成csv
2016/04/10 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
Python面向对象之Web静态服务器
2019/09/03 Python
Python闭包及装饰器运行原理解析
2020/06/17 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
银行求职推荐信范文
2013/11/30 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
志愿者活动总结范文
2014/04/26 职场文书
校园文明标语
2014/06/13 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
2014年教师节活动总结
2014/08/29 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
2015年服务员工作总结
2015/04/08 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
公司辞职信模板
2015/05/13 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
2016企业先进集体事迹材料
2016/02/25 职场文书
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技