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实现DNS正向查询、反向查询的例子
Apr 25 Python
Python代码的打包与发布详解
Jul 30 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
Python PyQt4实现QQ抽屉效果
Apr 20 Python
Python文本统计功能之西游记用字统计操作示例
May 07 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
python面试题Python2.x和Python3.x的区别
May 28 Python
python自动识别文本编码格式代码
Dec 26 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
Dec 31 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
解决python对齐错误的方法
Jul 16 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
2013/11/08 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
原生js二级联动效果
2017/06/20 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
[05:09]2016国际邀请赛中国区预选赛淘汰赛首日精彩回顾
2016/06/29 DOTA
python创建和使用字典实例详解
2013/11/01 Python
解析Python中的异常处理
2015/04/28 Python
python使用mailbox打印电子邮件的方法
2015/04/30 Python
Python实现按中文排序的方法示例
2018/04/25 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
django的model操作汇整详解
2019/07/26 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
Django使用rest_framework写出API
2020/05/21 Python
广告学专业应届生求职信
2013/10/01 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
小学教育见习报告
2014/10/31 职场文书
教师工作能力自我评价
2015/03/04 职场文书
演讲开场白台词大全
2015/05/29 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
python 模块重载的五种方法
2021/04/24 Python