Torch 学习总结
目录
1. torch.clamp()
2. torch.gather()
3. torch.bmm
4. torch.squeeze 与torch.unsqueeze
5. torch.expand
1. torch.clamp()
torch.clamp(input, min, max, out=None) → Tensor
将输入input
张量每个元素的夹紧到区间 [min,max][min,max],并返回结果到一个新张量。
操作定义如下:
| min, if x_i < min
y_i = | x_i, if min <= x_i <= max
| max, if x_i > max
例子代码
import torcha=torch.randint(low=0,high=10,size=(10,1))
print(a)
a=torch.clamp(a,3,6)
print(a)
运行结果
tensor([[9],[0],[4],[7],[8],[0],[7],[9],[2],[4]])
tensor([[6],[3],[4],[6],[6],[3],[6],[6],[3],[4]])
2. torch.gather()
作用:收集输入的特定维度指定位置的数值
例子代码
import torch
input = [[2, 3, 4, 5, 0, 0],[1, 4, 3, 0, 0, 0],[4, 2, 2, 5, 7, 0],[1, 0, 0, 0, 0, 0]
]
input = torch.tensor(input)
#注意index的类型
length = torch.LongTensor([[4],[3],[5],[1]])
#index之所以减1,是因为序列维度是从0开始计算的
out = torch.gather(input, 1, length-1)
prin(out)
运行结果
tensor([[5],[3],[7],[1]])
3. torch.bmm
计算两个tensor的矩阵乘法,torch.bmm(a,b),tensor a 的size为(b,h,w),tensor b的size为(b,w,h),注意两个tensor的维度必须为3.
例子代码
import torch
c = cc=torch.randn((2,2,5))
print(c)
d = torch.reshape(cc,(2,5,2))
print(d)
e = torch.bmm(c, d)
print(e)
运行结果
tensor([[[-1.9362, 0.9502, 0.4412, 0.2745, -1.0118],[ 0.0709, 1.4860, 0.9381, -0.6637, 1.0663]],[[-0.8230, -0.6033, 0.4908, 0.6017, 0.7760],[ 0.7727, -0.4746, -0.3565, -0.5635, 1.3207]]])
tensor([[[-1.9362, 0.9502],[ 0.4412, 0.2745],[-1.0118, 0.0709],[ 1.4860, 0.9381],[-0.6637, 1.0663]],[[-0.8230, -0.6033],[ 0.4908, 0.6017],[ 0.7760, 0.7727],[-0.4746, -0.3565],[-0.5635, 1.3207]]])
tensor([[[ 4.8012, -2.3691],[-2.1249, 1.0561]],[[ 0.0393, 1.3231],[-1.6222, 0.9178]]])Process finished with exit code 0
4. torch.squeeze 与torch.unsqueeze
torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成(3)行。squeeze(a)就是将a中所有为1的维度删掉。不为1的维度没有影响。a.squeeze(N) 就是去掉a中指定的维数为一的维度。还有一种形式就是b=torch.squeeze(a,N) a中去掉指定的定的维数为一的维度。
torch.unsqueeze()这个函数主要是对数据维度进行扩充。给指定位置加上维数为一的维度,比如原本有个三行的数据(3),在0的位置加了一维就变成一行三列(1,3)。a.squeeze(N) 就是在a中指定位置N加上一个维数为1的维度。还有一种形式就是b=torch.squeeze(a,N) a就是在a中指定位置N加上一个维数为1的维度
例子代码
import torchx = torch.zeros(3,2,4,1,2,1)# dimension of 3*2*4*1*2
print(x.size()) # torch.Size([3, 2, 4, 1, 2, 1])
print(x.shape)y = torch.squeeze(x) # Returns a tensor with all the dimensions of input of size 1 removed.
print(y.size()) # torch.Size([3, 2, 4, 2])
print(y.shape)z = torch.unsqueeze(y,dim=0)# Add a dimension of 1 in the 0th position
print(z.size()) # torch.Size([1, 3, 2, 4, 2])
print(z.shape)z = torch.unsqueeze(y,dim=1)# Add a dimension of 1 in the 1st position
print(z.size()) # torch.Size([3, 1, 2, 4, 2])
print(z.shape)z = torch.unsqueeze(y,dim=2)# Add a dimension of 1 in the 2nd position
print(z.size()) # torch.Size([3, 2, 1, 4, 2])
print(z.shape)y = torch.squeeze(x,dim=0) # remove the 0th position of 1 (no 1)
print('dim=0', y.size()) # torch.Size([3, 2, 4, 1, 2, 1])
print('dim=0', y.shape)y = torch.squeeze(x, dim=1) # remove the 1st position of 1 (no 1)
print('dim=1', y.size()) # torch.Size([3, 2, 4, 1, 2, 1])
print('dim=1', y.shape)y = torch.squeeze(x, dim=2) # remove the 2nd position of 1 (no 1)
print('dim=2', y.size()) # torch.Size([3, 2, 4, 1, 2])
print('dim=2', y.shape)y = torch.squeeze(x, dim=3) # remove the 3rd position of 1 (yes)
print('dim=3', y.size()) # torch.Size([3, 2, 4, 2])
print('dim=3', y.shape)y = torch.squeeze(x, dim=4) # remove the 4th position of 1 (no 1)
print('dim=4', y.size()) # torch.Size([3, 2, 4, 1, 2, 1])
print('dim=4', y.shape)y = torch.squeeze(x, dim=5) # remove the 5th position of 1 (yes)
print('dim=5', y.size()) # torch.Size([3, 2, 4, 1, 2])
print('dim=5', y.shape)y = torch.squeeze(x, dim=6) # RuntimeError: Dimension out of range (expected to be in range of [-6, 5], but got 6)
print('dim=6', y.size())
print('dim=6', y.shape)
5. torch.expand
返回tensor的一个新视图,单个维度扩大为更大的尺寸。 tensor也可以扩大为更高维,新增加的维度将附在前面。 扩大tensor不需要分配新内存,只是仅仅新建一个tensor的视图,其中通过将stride设为0,一维将会扩展位更高维。任何一个一维的在不分配新内存情况下可扩展为任意的数值。
例子代码
import torch
x = torch.Tensor([[1], [2], [3]])
print(x.size())
y = x.expand(3, 4)print(x.size())
print(y.size())print(x)
print(y)
结果
torch.Size([3, 1])
torch.Size([3, 1])
torch.Size([3, 4])
tensor([[1.],[2.],[3.]])
tensor([[1., 1., 1., 1.],[2., 2., 2., 2.],[3., 3., 3., 3.]])
Torch 学习总结相关推荐
- torch学习二之nn.Convolution
torch学习二之nn.Convolution nn.Conv1d 函数参数 输入数据维度转换 关于kernel nn.Conv2D nn.Conv1d 一维卷积通常用于处理文本数据 函数参数 首先看 ...
- 从零开始实现递归神经网络——【torch学习笔记】
从零开始实现递归神经网络--[torch学习笔记] 引用翻译:<动手学深度学习> 从头开始实现一个语言模型.它是基于H.G.威尔斯的 "时间机器 "所训练的字符级递归神 ...
- torch学习 (二十四):卷积神经网络之GoogleNet
文章目录 引入 1 Inception块 2 GoogleNet模型 3 模型训练 完整代码 util.SimpleTool 引入 GoogleNet吸收了NIN网络串联网络的思想,并在此基础上做 ...
- 卷积神经网络(LeNet)——【torch学习笔记】
卷积神经网络(LeNet) 引用翻译:<动手学深度学习> 我们现在准备把所有的工具放在一起,部署你的第一个全功能卷积神经网络.在我们第一次接触图像数据时,我们将多层感知器应用于Fashio ...
- torch学习 (三十四):迁移学习之微调
文章目录 引入 1 微调 2 热狗识别 2.1 数据集载入 2.2 数据集预处理 2.3 定义和初始化模型 2.4 微调模型 致谢 引入 场景: 从图像中识别出不同种类的椅子,然后将购买链接推 ...
- torch学习 (十七):填充和步幅
文章目录 引入 1 填充 2 步幅 引入 一般来说,对于输入为 n h × n w n_h \times n_w nh×nw的矩阵,以及 k h × k w k_h \times k_w kh ...
- torch学习(六):多层感知机
文章目录 引入 1.1 隐藏层 1.2 激活函数 1.2.1 ReLU函数: 1.2.2 sigmoid函数 2 完整代码 支持代码 引入 深度学习主要关注多层模型,接下来将以多层感知机 (mul ...
- torch学习笔记--tensor介绍2,对tensor的结构
本章将介绍tensor的结构与函数 torch.Tensor():返回一个空tensor. torch.Tensor(tensor):返回一个拥有相同内存的tensor,类似于指针.不是重新开辟一个内 ...
- python torch学习(一)
1.torch与numpy的比较及二者之间的转换. import torch import numpy as npnumpy_data = np.arange(15).reshape(3,5) pri ...
最新文章
- 试编写一个汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数
- 5G URLLC 是 ToB 的关键
- 【FFmpeg】FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 | 复用 | 解复用 )
- Java基于自定义注解的面向切面的实现
- http 状态码 504 502
- python条件循环叠加_Python基础:条件判断与循环的两个要点
- 让你快乐的21种方法
- 桌面显示计算机打开 磁盘不,电脑上的盘符打不开了怎么办
- C# 6.0 的那些事
- Linux命令行解析参数之getopt_long
- 服务器系统怎么添加网络打印机,如何添加网络打印机
- (二)动态白盒测试(含逻辑覆盖例子)
- LT8618SXB-HDMI发射器,运行功率小于100mA播放24bit 1080P内容,待机功率小于2mA
- Logistic逻辑回归预测员工离职问题
- 从删库到跑路,论运维的自我修养
- Thonny - 为初学者准备的Python开发工具
- python操作word文件_利用PYTHON操作WORD文档
- 拦截广告的链接(注意软件的广告不拦截,只拦截桌面图标链接)
- 又一个万亿级市场迎来新玩家?抖音内测网络拍卖功能
- 重装系统计算机无法启动,重装系统电脑无法开机怎么办?重装系统后电脑无法开机常见故障...
热门文章
- cocos2dx中加入unzip
- android post、get请求数据
- JavaScript本地存储实践(html5的localStorage和ie的userData)的实例页面
- 张开双臂迎接“云时代“的到来
- Spring Cloud Consul 基础使用介绍
- ZooKeeper 3.0.0发行说明
- Python3.x 基础练习题100例(91-100)
- .NET进行客户端Web开发又一利器 - Ant Design Blazor
- Docker 部署clickhouse-server及添加用户配置密码
- 不需要登陆的灵感笔记私人版正式上线,迭代优化中。