
Pytorch
文章平均质量分 69
地球被支点撬走啦
这个作者很懒,什么都没留下…
展开
-
pytorch 层标准化 LayerNorm 的用法
目录1、为什么要标准化(理解的直接跳过到这部分)2、LayerNorm 解释3、举例-只对最后 1 个维度进行标准化4、举例-对最后 D 个维度进行标准化1、为什么要标准化(理解的直接跳过到这部分)Batch Normalization 的作用就是把神经元在经过非线性函数映射后向取值区间极限饱和区靠拢的输入分布强行拉回到均值为 0 方差为 1 的比较标准的正态分布的区间,使得非线性变换函数的输入值落入激活函数比较敏感的区域,这样会让让梯度变大,由此避免了梯度消失的问题。而梯度变大..原创 2022-04-19 18:19:11 · 46494 阅读 · 3 评论 -
Pytorch 中 Embedding 类详解
在 NLP 领域,可以使用 Pytorch 的 torch.nn.Embeding() 类对数据进行词嵌入预处理。关于词嵌入的解释这里就不做解释咯,不明白的阔以先出门左拐找百度。重点说下这个 Embeding 类怎么用的。其定义如下:(class) Embedding(num_embeddings: int, embedding_dim: int, padding_idx: int | None = None, ...)我这里只显示了三个参数:num_embeddings、embedding原创 2022-04-02 16:29:04 · 6368 阅读 · 1 评论 -
对 torch.nn.Linear 的理解
torch.nn.Linear 是 pytorch 的线性变换层,定义如下:Linear(in_features: int, out_features: int, bias: bool = True, device: Any | None = None, dtype: Any | None = None)全连接层 Fully Connect 一般就就用这个函数来实现。因此在潜意识里,变换的输入张量的 shape 为 (batchsize, in_features),输出张量的 shape 为 (原创 2022-03-31 22:13:03 · 2110 阅读 · 0 评论 -
torch.triu 与 numpy.triu 函数
triu = triangle up (我猜的)顾名思义,这个函数的作用相同,都是返回上三角矩阵,定义分别如下:numpy.triu(m, k)torch.triu(Tensor, diagonal)这两个函数的对应参数都是相同的含义。m 代表要操作的矩阵,k 代表以哪条对角线作为上三角矩阵的对角线。k=0 代表主对角线,k 为正数则从主对角线开始向上数第 k 条,k 为负数则从主对角线开始向下数第 k 条。举例如下:import torchimport numpy as np#原创 2022-03-31 16:28:50 · 5074 阅读 · 0 评论 -
torchvision与torch的对应关系及下载链接
对应关系:https://pypi.org/project/torchvision/下载地址:https://download.pytorch.org/whl/torch_stable.html原创 2020-12-16 21:34:47 · 2344 阅读 · 0 评论 -
在Ubuntu18上用LibTorch(非darknet)部署YOLOv4的填坑之路(附源码)
目录坑一:从官网下载的LibTorch库是不带torchvision的坑二:Python的PIL库与opencv库在图像处理上的差异值得注意坑三:LibTorch对tensor的各种变换操作度相比Python令人窒息坑四:LibTorch中的tensor转数组(向量)坑五:YOLOv4模型的输出是个tuple,不能在forward后直接使用toTensor()三周前,满怀懵逼的心情开始了艰难的YOLOv4的部署之路,有多艰难?一没基础,二没支援,刚开始用PyTorch,LibTorc原创 2020-11-21 14:29:08 · 1356 阅读 · 9 评论 -
LibTorch:tensor.index_select()
LibTorch中的tensor.index_select()方法与PyTorch中的用法类似,先看一下在LibTorch中的声明:inline Tensor Tensor::index_select(int64_t dim, const Tensor & index)主要是两个参数,一个是要选择的维度,对于二维tensor来说,0代表按行索引,1代表按列索引,参数index代表索引值,这个参数要重点注意一下!首先index它本身就是一个tensor!另外,还得是int64(kLong)类原创 2020-11-12 12:00:55 · 2234 阅读 · 0 评论 -
LibTorch对tensor的索引/切片/掩码操作:对比PyTorch
目录一、通过索引获取值二、通过索引设置值在PyTorch C++ API(libtorch)中对张量进行索引的方式与Python API的方式很相似。诸如None / ... / integer / boolean / slice / tensor的索引类型在C++ API里同样有效,这样就可以很方便的实现Python代码与C++代码的转换。主要的不同是将Python API里对张量的“[ ]”操作符转换成了以下形式:torch::Tensor::index ( ) // 获取值.原创 2020-11-11 20:26:42 · 11422 阅读 · 14 评论 -
AODNet在Libtorch端的部署全过程(附详细源码)
目录一、部署环境二、部署过程1、VS2017配置Opencv的环境2、CMake的安装3、PyTorch —> Libtorch模型的转换4、Libtorch端的实现5、遇到的问题一、部署环境Windows10、Opencv3.4.10、Libtorch1.5.0-CPU-Release、PyTorch1.5.0-CUDA10.1、VS2017、CMake3.19二、部署过程1、VS2017配置Opencv的环境参考博客。感谢这位博主的分享,亲测有效!原创 2020-10-31 20:47:12 · 2137 阅读 · 5 评论 -
PyTorch:Dataset()与Dataloader()的使用详解
目录1、Dataset类的使用2、Dataloader类的使用3、总结Dataset类与Dataloader类是PyTorch官方封装的用于在数据集中提取一个batch的训练用数据的接口,其实我们也可以自定义获取每个batch的方法,但是对于大数据量的数据集,直接用封装好的接口会很大程度上提升效率。一般情况下,Dataset类与Dataloader类是配合着使用的,Dataset负责整理数据,Dataloader负责在整理好的数据中按照一定的规则取出batch_size个数据来供网络训练原创 2020-10-19 17:11:17 · 3905 阅读 · 0 评论 -
PyTorch:torch.Tensor.repeat()、expand()
目录1、torch.Tensor.repeat()2、torch.Tensor.expand()1、torch.Tensor.repeat()函数定义:repeat(*sizes) → Tensor作用:在指定的维度上重复这个张量,即把这个维度的张量复制*sizes次。同时可以通过复制的形式扩展维度的数量。注意:torch.Tensor.repeat方法与numpy.tile方法作用相似,而不是numpy.repeat!torch中与numpy.repeat类似的方法是to原创 2020-10-17 17:59:12 · 2707 阅读 · 1 评论 -
PyTorch:torch.linspace
函数定义:torch.linspace(start, end, steps=100, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor作用:返回从起始值start(含)到结束值end(含)之间steps个等步距的值的一维张量,步距为(end+1-start)/steps。有点拗口,直接用例子分析吧:import torcha = torch.linspace(s原创 2020-10-17 17:17:40 · 453 阅读 · 0 评论 -
PyTorch:torch.sum
torch.sum函数定义:torch.sum(input, dim, keepdim=False, dtype=None) → Tensor作用:返回输入tensor的指定维度dim上的和。参数keepdim表示输出张量是否保留原有的dim。应用举例:例1——输出tensor单个维度的和a = torch.randint(2, 10,(6,4)) # 创建shape为6*4,值为[2,10]的随机整数的tensorb = torch.sum(a, dim=0) #原创 2020-10-17 16:29:19 · 1026 阅读 · 2 评论 -
PyTorch:view() 与 reshape() 区别详解
总之,view能干的reshape都能干,如果view不能干就用reshape来处理。目录一、PyTorch中tensor的存储方式1、PyTorch张量存储的底层原理2、PyTorch张量的步长(stride)属性二、view() 和reshape() 的比较1、torch.Tensor.view()2、torch.reshape()一、PyTorch中tensor的存储方式想要深入理解view与reshape的区别,首先要理解一些有关PyTorch张量存储的底层原理,原创 2020-10-17 15:52:33 · 64038 阅读 · 80 评论 -
PyTorch:torch.max、min、argmax、argmin
1、torch.max函数定义:torch.max(input, dim, max=None, max_indices=None) -> (Tensor, LongTensor)作用:找出给定tensor的指定维度dim上的上的最大值,并返回最大值在该维度上的位置索引。应用举例:例1——返回相应维度上的最大值import torcha = torch.randint(2, 10,(6,4)) # 创建shape为6*4,值为[2,10]的随机整数的tensor原创 2020-10-17 09:47:01 · 3744 阅读 · 0 评论 -
PyTorch:torch.sort()
作用:对给定tensor的指定维度进行排序,返回排序后的结果和排序后的值对应原来维度位置的序号。举例说明:import torcha = torch.randint(2, 10,(6,4)) # 创建shape为6*4,值为[2,10]的随机整数的tensorb, sort_index = torch.sort(a, dim=1, descending=True) # 对a的第1维度(列)进行降序排序,返回结果和排序后的值对应原来维度位置的序号print('a:', a)print('b原创 2020-10-16 23:41:04 · 1538 阅读 · 0 评论 -
PyTorch:torch.clamp()用法详解
函数定义:torch.clamp(input, min, max, out=None)作用:限幅。将input的值限制在[min, max]之间,并返回结果。out (Tensor, optional) – 输出张量,一般用不到该参数。举例说明:import torcha = torch.arange(9).reshape(3, 3) # 创建3*3的tensorb = torch.clamp(a, 3, 6) # 对a的值进行限幅,限制在[3, 6]print('a原创 2020-10-16 23:03:30 · 24302 阅读 · 0 评论 -
PyTorch:torch.Tensor.unsqueeze()、squeeze()
目录1、unsqueeze()2、squeeze()3、expand()1、unsqueeze()作用:给指定的tensor增加一个指定(之前不存在的)的维度。通常用在两tensor相加,但不满足shape一致,同时又不符合广播机制的情况下。举例说明:# 两tensor相加,但不满足shape一致,同时又不符合广播机制的例子:a = torch.ones(3,2,4) # 创建3*2*4的全为1的tensorb = torch.zeros(3,4) # 创建3*4的全原创 2020-10-16 22:51:34 · 1849 阅读 · 0 评论 -
PyTorch:torch.zeros_like()的用法
作用,产生一个与a相同shape的Tensor.举例:import torcha = torch.rand(3,4) # 产生一个3行4列的0~1的随机Tensorb = torch.zeros_like(a) # 产生一个与a相同shape的全零Tensorprint('a:',a)print('b:',b)''' 运行结果 '''a: tensor([[0.9285, 0.0966, 0.2180, 0.1234], [0.8930, 0.91原创 2020-10-16 22:06:28 · 6086 阅读 · 1 评论