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代码的打包与发布详解
Jul 30 Python
Python实现的数据结构与算法之队列详解
Apr 22 Python
python 把文件中的每一行以数组的元素放入数组中的方法
Apr 29 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
python3监控CentOS磁盘空间脚本
Jun 21 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
pycharm远程开发项目的实现步骤
Jan 20 Python
python plotly绘制直方图实例详解
Jul 22 Python
python中for循环变量作用域及用法详解
Nov 05 Python
Django在Model保存前记录日志实例
May 14 Python
部署Django到阿里云服务器教程示例
Jun 03 Python
python-地图可视化组件folium的操作
Dec 14 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实现微信企业号支付个人的方法详解
2017/07/26 PHP
xmlHTTP实例
2006/10/24 Javascript
JS array 数组详解
2009/03/22 Javascript
JS获取当前日期时间并定时刷新示例
2021/03/04 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
Python程序设计入门(3)数组的使用
2014/06/16 Python
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
Python 爬虫的工具列表大全
2016/01/31 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
Python多线程thread及模块使用实例
2020/04/28 Python
美国羊皮公司:Overland
2018/01/15 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
社会实践评语
2014/04/28 职场文书
公益广告标语
2014/06/19 职场文书
社会实践活动总结范文
2014/07/03 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
工作失职检讨书范文
2015/05/05 职场文书
生产车间管理制度
2015/08/04 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang