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 translator使用实例
Sep 06 Python
python生成指定尺寸缩略图的示例
May 07 Python
python中对list去重的多种方法
Sep 18 Python
python使用tornado实现简单爬虫
Jul 28 Python
python+opencv实现霍夫变换检测直线
Oct 23 Python
Python批量删除只保留最近几天table的代码实例
Apr 01 Python
python join方法使用详解
Jul 30 Python
python 列表推导式使用详解
Aug 29 Python
python装饰器使用实例详解
Dec 14 Python
python实现数字炸弹游戏程序
Jul 17 Python
python切割图片的示例
Nov 12 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 15 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
jQuery简单实现禁用右键菜单
2015/03/10 Javascript
jQuery解析json数据实例分析
2015/11/24 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
Python格式化输出--%s,%d,%f的代码解析
2020/04/29 Python
Python如何根据时间序列数据作图
2020/05/12 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
简短证婚人证婚词
2014/01/09 职场文书
ktv筹备计划书
2014/05/03 职场文书
学习经验演讲稿
2014/05/10 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
2015年酒店销售部工作总结
2015/07/24 职场文书
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android