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中操作时间之tzset()方法的使用教程
May 22 Python
详解Python命令行解析工具Argparse
Apr 20 Python
python cx_Oracle的基础使用方法(连接和增删改查)
Nov 19 Python
Django实现组合搜索的方法示例
Jan 23 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
django框架模型层功能、组成与用法分析
Jul 30 Python
python 字典 setdefault()和get()方法比较详解
Aug 07 Python
python加载自定义词典实例
Dec 06 Python
使用python 将图片复制到系统剪贴中
Dec 13 Python
关于python中readlines函数的参数hint的相关知识总结
Jun 24 Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 Python
python三子棋游戏
May 04 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
提问的智慧(2)
2006/10/09 PHP
PHP number_format() 函数定义和用法
2012/06/01 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
php取得字符串首字母的方法
2015/03/25 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
2016/04/14 PHP
Javascript学习笔记8 用JSON做原型
2010/01/11 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
a标签置灰不可点击的实现方法
2017/02/06 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
2019/12/04 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
python通过floor函数舍弃小数位的方法
2015/03/17 Python
通过数据库向Django模型添加字段的示例
2015/07/21 Python
Django单元测试工具test client使用详解
2019/08/02 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
python 实现视频 图像帧提取
2019/12/10 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
Linux文件操作命令都有哪些
2016/07/23 面试题
40岁生日感言
2014/02/15 职场文书
战友聚会主持词
2014/04/02 职场文书
秋天的图画教学反思
2014/05/01 职场文书
献爱心活动总结
2014/05/07 职场文书
文明寝室申报材料
2014/05/12 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2014教师年度工作总结
2014/11/10 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
如何写好活动总结
2019/06/21 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
如何在C++中调用Python
2021/05/21 Python