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中wx将图标显示在右下角的脚本代码
Mar 08 Python
Python库urllib与urllib2主要区别分析
Jul 13 Python
Python实现生成简单的Makefile文件代码示例
Mar 10 Python
python循环监控远程端口的方法
Mar 14 Python
使用Python的Flask框架实现视频的流媒体传输
Mar 31 Python
python命名空间(namespace)简单介绍
Aug 10 Python
python实现ip地址查询经纬度定位详解
Aug 30 Python
Python实现RGB与HSI颜色空间的互换方式
Nov 27 Python
python logging设置level失败的解决方法
Feb 19 Python
python shell命令行中import多层目录下的模块操作
Mar 09 Python
tensorflow2.0的函数签名与图结构(推荐)
Apr 28 Python
在Python中实现字典反转案例
Dec 05 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
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
jquery禁用右键示例
2014/04/28 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
domReady的实现案例
2016/11/23 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
JS实现移动端在线签协议功能
2019/08/22 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
在Python中使用元类的教程
2015/04/28 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
解决yum对python依赖版本问题
2019/07/05 Python
python温度转换华氏温度实现代码
2020/12/06 Python
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
英国内衣连锁店:Boux Avenue
2018/01/24 全球购物
管理学专业个人求职信范文
2013/09/21 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
篮球比赛口号
2014/06/10 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
学校运动会报道稿
2014/09/23 职场文书
政府会议通知范文
2015/04/15 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
小学运动会前导词
2015/07/20 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python