目录

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 学习总结相关推荐

  1. torch学习二之nn.Convolution

    torch学习二之nn.Convolution nn.Conv1d 函数参数 输入数据维度转换 关于kernel nn.Conv2D nn.Conv1d 一维卷积通常用于处理文本数据 函数参数 首先看 ...

  2. 从零开始实现递归神经网络——【torch学习笔记】

    从零开始实现递归神经网络--[torch学习笔记] 引用翻译:<动手学深度学习> 从头开始实现一个语言模型.它是基于H.G.威尔斯的 "时间机器 "所训练的字符级递归神 ...

  3. torch学习 (二十四):卷积神经网络之GoogleNet

    文章目录 引入 1 Inception块 2 GoogleNet模型 3 模型训练 完整代码 util.SimpleTool 引入   GoogleNet吸收了NIN网络串联网络的思想,并在此基础上做 ...

  4. 卷积神经网络(LeNet)——【torch学习笔记】

    卷积神经网络(LeNet) 引用翻译:<动手学深度学习> 我们现在准备把所有的工具放在一起,部署你的第一个全功能卷积神经网络.在我们第一次接触图像数据时,我们将多层感知器应用于Fashio ...

  5. torch学习 (三十四):迁移学习之微调

    文章目录 引入 1 微调 2 热狗识别 2.1 数据集载入 2.2 数据集预处理 2.3 定义和初始化模型 2.4 微调模型 致谢 引入   场景:   从图像中识别出不同种类的椅子,然后将购买链接推 ...

  6. torch学习 (十七):填充和步幅

    文章目录 引入 1 填充 2 步幅 引入   一般来说,对于输入为 n h × n w n_h \times n_w nh​×nw​的矩阵,以及 k h × k w k_h \times k_w kh ...

  7. torch学习(六):多层感知机

    文章目录 引入 1.1 隐藏层 1.2 激活函数 1.2.1 ReLU函数: 1.2.2 sigmoid函数 2 完整代码 支持代码 引入   深度学习主要关注多层模型,接下来将以多层感知机 (mul ...

  8. torch学习笔记--tensor介绍2,对tensor的结构

    本章将介绍tensor的结构与函数 torch.Tensor():返回一个空tensor. torch.Tensor(tensor):返回一个拥有相同内存的tensor,类似于指针.不是重新开辟一个内 ...

  9. python torch学习(一)

    1.torch与numpy的比较及二者之间的转换. import torch import numpy as npnumpy_data = np.arange(15).reshape(3,5) pri ...

最新文章

  1. 试编写一个汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数
  2. 5G URLLC 是 ToB 的关键
  3. 【FFmpeg】FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 | 复用 | 解复用 )
  4. Java基于自定义注解的面向切面的实现
  5. http 状态码 504 502
  6. python条件循环叠加_Python基础:条件判断与循环的两个要点
  7. 让你快乐的21种方法
  8. 桌面显示计算机打开 磁盘不,电脑上的盘符打不开了怎么办
  9. C# 6.0 的那些事
  10. Linux命令行解析参数之getopt_long
  11. 服务器系统怎么添加网络打印机,如何添加网络打印机
  12. (二)动态白盒测试(含逻辑覆盖例子)
  13. LT8618SXB-HDMI发射器,运行功率小于100mA播放24bit 1080P内容,待机功率小于2mA
  14. Logistic逻辑回归预测员工离职问题
  15. 从删库到跑路,论运维的自我修养
  16. Thonny - 为初学者准备的Python开发工具
  17. python操作word文件_利用PYTHON操作WORD文档
  18. 拦截广告的链接(注意软件的广告不拦截,只拦截桌面图标链接)
  19. 又一个万亿级市场迎来新玩家?抖音内测网络拍卖功能
  20. 重装系统计算机无法启动,重装系统电脑无法开机怎么办?重装系统后电脑无法开机常见故障...

热门文章

  1. cocos2dx中加入unzip
  2. android post、get请求数据
  3. JavaScript本地存储实践(html5的localStorage和ie的userData)的实例页面
  4. 张开双臂迎接“云时代“的到来
  5. Spring Cloud Consul 基础使用介绍
  6. ZooKeeper 3.0.0发行说明
  7. Python3.x 基础练习题100例(91-100)
  8. .NET进行客户端Web开发又一利器 - Ant Design Blazor
  9. Docker 部署clickhouse-server及添加用户配置密码
  10. 不需要登陆的灵感笔记私人版正式上线,迭代优化中。