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执行shell获取硬件参数写入mysql的方法
Dec 29 Python
python实现按行切分文本文件的方法
Apr 18 Python
在Python中,不用while和for循环遍历列表的实例
Feb 20 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
详解python读取和输出到txt
Mar 29 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
python datetime中strptime用法详解
Aug 29 Python
Django Admin中增加导出CSV功能过程解析
Sep 04 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
May 13 Python
Python中的特殊方法以及应用详解
Sep 20 Python
python 使用OpenCV进行简单的人像分割与合成
Feb 02 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边学边教》(01.开篇――准备工作)
2006/12/13 PHP
PHP写的资源下载防盗链类分享
2014/05/12 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
关于jQuery中的end()使用方法
2011/07/10 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
Node.js实现在目录中查找某个字符串及所在文件
2014/09/03 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
Vue 项目部署到服务器的问题解决方法
2017/12/05 Javascript
AngularJs返回前一页面时刷新一次前面页面的方法
2018/10/09 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
Python中Threading用法详解
2017/12/27 Python
Python中的heapq模块源码详析
2019/01/08 Python
python处理大日志文件
2019/07/23 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
Pygame框架实现飞机大战
2020/08/07 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
英语专业个人求职自荐信
2013/09/21 职场文书
青奥会口号
2014/06/12 职场文书
财务工作犯错检讨书
2014/10/07 职场文书
2014年招生工作总结
2014/11/26 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书