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将mdb数据库文件导入postgresql数据库示例
Feb 17 Python
Python中处理字符串的相关的len()方法的使用简介
May 19 Python
通过Python使用saltstack生成服务器资产清单
Mar 01 Python
PyCharm设置SSH远程调试的方法
Jul 17 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
Python常用特殊方法实例总结
Mar 22 Python
python实现桌面气泡提示功能
Jul 29 Python
python中单下划线(_)和双下划线(__)的特殊用法
Aug 29 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
Feb 10 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
Python爬虫实现selenium处理iframe作用域问题
Jan 27 Python
详细总结Python常见的安全问题
May 21 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使用DES进行加密与解密的方法详解
2013/06/06 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
php表单请求获得数据求和示例
2014/05/15 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
php可变长参数处理函数详解
2017/02/22 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
jquery uploadify 在FF下无效的解决办法
2014/09/26 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
浅谈js中的闭包
2015/03/16 Javascript
javascript常用的方法整理
2015/08/20 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
BootStrap入门学习第一篇
2017/08/28 Javascript
基于vue.js组件实现分页效果
2018/12/29 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
详解Django通用视图中的函数包装
2015/07/21 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
python利用正则表达式搜索单词示例代码
2017/09/24 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
用python求一重积分和二重积分的例子
2019/12/06 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
Python持续监听文件变化代码实例
2020/07/22 Python
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
给排水工程师岗位职责
2013/11/21 职场文书
酒店销售主管岗位职责
2014/01/04 职场文书
合作经营协议书
2014/04/17 职场文书
环保倡议书怎么写
2014/05/16 职场文书
抗洪救灾先进集体事迹材料
2014/05/26 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
Python Pandas解析读写 CSV 文件
2022/04/11 Python