pytorch
文章平均质量分 75
学渣渣渣渣渣
我是菜
深度学习方向,欢迎交流~
展开
-
【pytorch】torch.nn.utils.rnn的pad_sequence、pack_padded_sequence、pad_packed_sequence、PackedSequence
nn.utils.rnn.PackedSequence是nn.utils.rnn.pack_padded_sequence的亲戚,两者输出的结果都一样,都是将序列进行pack,得到。第一个是PackedSequence对象,而标准RNN返回的是所有序列,每个位置的隐向量输出,形状是[batch_size,seq_len,hidden_size]。第二个一模一样,是RNN每一个序列的最后一个位置的隐向量输出,形状是[batch_size,hidden_size]。类型的变量,只是输入的参数不一样。原创 2023-07-04 23:57:18 · 739 阅读 · 0 评论 -
【pytorch】lstm基本用法&参数讲解
【代码】【lstm】基本用法&参数讲解。原创 2023-07-04 13:36:45 · 880 阅读 · 0 评论 -
【pytorch】模型剪枝 model pruning
torch.nn.utils.prune 是pytorch用于修剪模型的工具包,其通过 修改将模型某一层的参数进行限定,然后再使用 prune.remove 函数进行修剪,一般来说,修剪参数值较小的参数,模型的性能也不会发生太大变化。但是要注意,本文介绍的都是非结构剪枝,就是哪些被裁剪为0的参数,在经过模型重新训练以后,会重新进行迭代更新,对于结构剪枝,使用本文的方法不适用,建议采用 github 上面的一些库来进行实现。原创 2023-04-09 21:56:38 · 798 阅读 · 1 评论 -
【pytorch】self.register_buffer()的作用:定义为不可训练的模型参数
PyTorch中定义模型时,有时候会遇到 self.register_buffer(‘name’, Tensor)的操作,该方法的作用是定义一组参数,该组参数的特别之处在于:模型训练时不会更新(即调用 optimizer.step() 后该组参数不会变化,只可人为地改变它们的值),但是保存模型时,该组参数又作为模型参数不可或缺的一部分被保存。而 register_parameter() 和它是相反的功能。原创 2023-03-12 13:04:19 · 676 阅读 · 0 评论 -
【pytorch】nn.Embedding()
翻译过来的意思就是词嵌入,通俗来讲就是将文字转换为一串数字。因为数字是计算机更容易识别的一种表达形式。我们词嵌入的过程,就相当于是我们在给计算机制造出一本字典的过程。计算机可以通过这个字典来间接地识别文字。词嵌入向量的意思也可以理解成:词在神经网络中的向量表示。num_embeddings (python:int) – 词典的大小尺寸,比如总共出现5000个词,那就输入5000。此时index为(0-4999)原创 2023-03-11 16:03:56 · 543 阅读 · 0 评论 -
【pytorch】torch.clip() & torch.clamp() 数值裁剪
这两个函数用法一样,效果也一样。原创 2023-02-15 20:03:23 · 11150 阅读 · 0 评论 -
【pytorch】利用 model.children() 对模型进行拆解;提取复杂嵌套模型的某一层
可以看到,模型一共有三个大层,分别命为:‘avgpool’,‘features’,‘classifier’。而每一个大层里面又嵌套了很多小层(子层)。以往,我们只能够通过一个个引用来进行调用大层或者小层(子层),例如:也可以通过list()原创 2022-12-10 18:54:21 · 2253 阅读 · 0 评论 -
【python】获取当前时间(年月日时分秒)
需要用到 time 包,这个包python自带,无需另外下载。想要哪个,就在字符串里输入哪个就行了,它会自动匹配的。原创 2022-10-28 10:31:49 · 24174 阅读 · 0 评论 -
【matplotlib&torchvision&torch】图片的保存,呈现(plt.imshow),读取;将tensor保存为图片
经过 pytorch 模型输出的图像以 array 的形式呈现,其shape 如下(图片数量,通道数,长,宽),本文结合代码,介绍如何使用和将上述形式的图像保存下来。原创 2022-10-26 18:07:22 · 20279 阅读 · 0 评论 -
【pytorch】optimizer(优化器)的使用详解
本文介绍包常见的 torch.optim 的使用方法和使用技巧。原创 2022-10-26 12:18:58 · 27005 阅读 · 1 评论 -
【pytorch】CGAN编程实现
由于原始GAN生成的图像是随机的,不可预测的,无法控制网络输出特定的图片,,可控性不强。针对原始GAN不能生成具有特定属性的图片的问题, Mehdi Mirza等人提出了cGAN,其核心在于cGAN的中心思想是希望 可以控制 GAN 生成的图片,而不 是单纯的随机生成图片。具体来说,Conditional GAN 在生成器和判别器的输入中 增加了额外的 条件信息,生成器生成的图片只有足够真实 且与条件相符,才能够通过判别器。实际上 , 在无条件约束的生成模型中 , 没法控制数据生成的模式。原创 2022-10-25 22:25:14 · 19423 阅读 · 0 评论 -
【tqdm】进度条工具
【代码】【tqdm】进度条工具。原创 2022-10-09 13:33:51 · 17952 阅读 · 0 评论 -
【timm】一个基于pytorch的图像模型库
参考:https://rwightman.github.io/pytorch-image-models/该库包含了很多种类的涉及图像模型,包括ViT。安装pip install timm#或者pip install git+https://github.com/rwightman/pytorch-image-models.git读取模型查看有哪些可用模型查看有哪些 pre-trained模型可用:import timmfrom pprint import pprintmodel_n原创 2022-05-23 10:38:02 · 18246 阅读 · 3 评论 -
【pytorch】分析解释模型 pytorch + captum
本文介绍pytorch协同编程,即 https://github.com/pytorch/captum原创 2022-03-11 16:18:39 · 20893 阅读 · 1 评论 -
【PIL】torch.tensor和为PIL.Image的相互转换;归一化和反归一化
本质是数值转图像,同时,前者的格式是(数量×\times×通道数×\times×长×\times×宽),后者的格式是(长×\times×宽×\times×通道数),因此在转变时得转置一下,幸运的是,torchvision 包里有一键转换的函数。为了神经网络更快收敛,我们需要把读取图片得到的 tensor 进行归一化,处理后的图片如果如果不进行反归一化到 [0,1],出现了负值,就会变成下面这样:哦哦来看一下原图:1 归一化和反归一化总结一下他们的关系:读取的图片得到数值(范围大小在 [0,2原创 2021-12-11 12:16:12 · 26286 阅读 · 6 评论 -
【pytorch】插值--torch.nn.functional.interpolate()
本文讲解如何用pytorch包进行插值,不仅限于函数插值,还包括图像的插值(即缩放)。假设我有一个图像a,其大小为(4,4):import torchimport torch.nn as nna = torch.randint(10,(4,4))a = a / torch.max(a)[0]# 打印图片plt.imshow(a)out:但是我想利用插值技术把它分辨率变高,比如变成(28,28)的大小,那么我们可以这么做,记住,一定要把原图像扩充成4维,按照文档的说法是:The inpu原创 2021-12-10 20:07:18 · 26450 阅读 · 0 评论 -
对模型进行DP处理(DP-SGD+DP-Logits)
该技术来源于论文:Deep Learning with Differential Privacy讲述了如何在模型训练期间,通过修改损失函数,使训练后的模型具有一定抵御的DP的能力。原论文很长很复杂,本博客不讲原理,直接复现。参照https://github.com/pytorch/opacus/blob/main/tutorials/building_image_classifier.ipynb 进行讲解。安装依赖包需要用到 opacus 、 tqdm 包,用 pip 安装就好了。1 确定超参原创 2021-10-14 11:46:56 · 22006 阅读 · 17 评论 -
torch--Auto Encoder(AE) 示例代码
正常情况下,AE的输入维度=输出维度,但是也可以不相等。放一个基础的写法:# 假设输入维度是 784,输出维度是20,中间维度是3in_size = 784out_size = 20#hyper paramsEPOCH = 500 LR = 0.005 # learning rateclass AutoEncoder(nn.Module): def __init__(self): super(AutoEncoder, self).__init__()原创 2021-09-04 20:59:27 · 17474 阅读 · 0 评论 -
【pytorch】预训练模型的使用;修改模型结构;自定义模型;给模型添加层
pytorch自带有一些高级的复杂模型,我们可以通过 torchvision.models 调用,例如torchvision.models.densenet169(pretrained=True)就调用了densenet169的预训练模型。1 查看网络结构model2 = models.densenet169()# 查看网络结构print(model2)out:结构很长,所以只截图了最后一部分,我们可以发现这个模型的输出单元有1000个,也就是说这是一个1000分类的模型。2 修改模型(分原创 2021-08-30 23:02:43 · 21979 阅读 · 4 评论 -
【pytorch】正态分布(高斯分布)、Q函数、误差函数、互补误差函数
则这个随机变量就称为正态随机变量,正态随机变量服从的分布就称为正态分布,记作。这个函数可以看作是高斯分布函数的不定积分,如何相互转换见第5节的图6.2.时,称为标准正态分布。一般正态分布的分布函数。标准正态分布的分布函数。如下图是一般正态分布。如下图是标准整体分布。原创 2021-03-31 11:20:02 · 7788 阅读 · 0 评论 -
【pytorch】torch.cat() & torch.split();tensor的拼接和分离
目录1 torch.cat()2 torch.split()1 torch.cat()torch.cat(tensors, dim=0, *, out=None) → TensorConcatenates the given sequence of seq tensors in the given dimension. All tensors must either have the same shape (except in the concatenating dimension) or be原创 2021-03-30 21:50:39 · 17500 阅读 · 0 评论 -
【pytorch】损失函数的选择
目录在pytorch中,例如我们最常用的计算一条数据的交叉熵:并非就是 torch.nn.CrossEntropyLoss,torch.nn.CrossEntropyLoss包括了三个步骤的处理:把输出矢量 [z1, z2, …, zK] 进行softmax化,使得概率和为1;softmax化后的输出进行 log 计算。根据交叉熵的计算公式,结合该条数据真实标签,计算损失熵,注意这里会自动加上一个负号,以得到正的结果。所以说,在pytorch框架下,我们在设计模型时,模型的原创 2021-03-14 21:36:51 · 18056 阅读 · 0 评论 -
【pytorch】FL联邦学习 数据集的划分+non-iid数据集的划分
torchvision.datasets里的数据集都是整一个的,尤其在联邦学习中,我们需要划分不同的数据集给不同的参与者,如何将torchvision中的数据集划分成为了联邦学习中的重大挑战。在联邦学习场景下,各方的数据理应不为同分布,即不满足iid,因此在模拟时不能随机进行数据分配,应该适当调整下发给各client的数据分布。类的数据,其他数据分布都等概率,实际运用中其实可以没有必要规定等概率,仅限定 第。随机分配样本,返回的是每个client的索引。类数据出现的概率就好了。唯一的缺点是 除了第。原创 2021-02-27 19:55:17 · 22259 阅读 · 11 评论 -
【pytorch】跟着例子学pytorch
在底层,每个原语autograd运算符实际上是两个作用于张量的函数。forward函数从输入张量计算输出张量。backward接收到输出张量相对于某个标量值的梯度,然后计算输入张量相对于该标量值的梯度。在PyTorch中,通过定义torch.autograd的子类,我们可以很容易地定义自己的autograd操作符。函数,并实现forward和backward函数。然后,我们可以通过构造一个实例并像调用函数一样调用它来使用新的autograd运算符,传递包含输入数据的张量。在本例中,我们将模型定义为。原创 2020-12-08 18:37:38 · 17156 阅读 · 0 评论 -
【pytorch】tensor的复制避坑;tensor.clone() & tensor.detach() 详解
目录1 tensor.clone()2 tensor.detach()问题来源:a = torch.zeros(2, 3)for i in range(2): for j in range(3): b = a.data b[i, j] = 1 print("b:", b) print("a:", a)我原以为 b = a.data 就是开辟一个新空间给 b变量,然后修改 b 的值时 a 的值不会因此变化,谁知道即使用了.dat原创 2020-12-07 22:17:37 · 21194 阅读 · 0 评论 -
【pytorch】教程——以CIFAR10为例
目录1 加载数据集1 加载数据集torchvision库里有很多数据集。import torchimport torchvisionimport torchvision.transforms as transformsThe output of torchvision datasets are PILImage images of range [0, 1]. We transform them to Tensors of normalized range [-1, 1]. 还是建议把数据Nor原创 2020-12-05 22:43:26 · 17352 阅读 · 0 评论 -
【pytorch】模型的保存、读取;查看模型参数、梯度;查看模型某一层输出
model.state_dict() 会以字典的方式打印模型的全部参数,如果模型参数过多,查看起来就很不方便,可以用。Output Shape里的 -1 是表示样本数量的意思,值得注意的是,池化层是没有参数的,卷积层是有参数的,做法来自FedIPR,很简单,给模型参数添加 normal 噪声就行了。会返回一份在GPU上的my_tensor的拷贝。在把GPU上训练的模型加载到GPU上时,只需要使用。当在CPU上加载一个GPU上训练的模型时,在。得先知道该层的名字,然后再引用它。原创 2020-12-05 17:26:00 · 30033 阅读 · 1 评论 -
【pytorch】保证实验的可重复性——随机数种子的设定
如何让每次实验运行后得到的结果都一致?可以通过将以下设置放在 import 后,正式代码前:np.random.seed(0)random.seed(0)torch.manual_seed(0)torch.cuda.manual_seed(0)torch.backends.cudnn.deterministic = Truetorch.backends.cudnn.benchmark = False # 这个开了可以加速,不推荐关闭当然,别忘了训练好的模型预测时这样操作一下:model.原创 2020-12-05 15:45:53 · 17054 阅读 · 0 评论 -
【pytorch】卷积层计算规则
torch.nn 里有很多神经网络模型需要的各种层和工具。神经网络的工作流程:A typical training procedure for a neural network is as follows:Define the neural network that has some learnable parameters (or weights)Iterate over a dataset of inputsProcess input through the networkCompute原创 2020-12-03 17:40:11 · 17633 阅读 · 1 评论 -
【pytorch】用cuda(GPU)处理数据
目录设置GPU的一些操作直接在gpu创建从cpu转移到gpu考虑到各种运算只能在cpu或者gpu运算,不能混和运算,本文介绍常用的几种把数据挪到gpu或者直接在gpu创建数据再进行运算的方法。设置GPU的一些操作设置在os端哪些GPU可见,如果不可见,那肯定是不能够调用的~import osGPU = '0,1,2'os.environ['CUDA_VISIBLE_DEVICES'] =GPUtorch.cuda.is_available()查看cuda是否可用。if torch.原创 2020-09-23 19:53:50 · 21287 阅读 · 2 评论 -
【pytorch】torchvision.transforms 图像的变换详解;图像的预处理;数据增强
torchvision.transforms是包含一系列常用图像变换方法的包,可用于图像预处理、数据增强等工作,但是注意它更适合于classification等对数据增强后无需改变图像的label的情况,对于Segmentation等对图像增强时需要同步改变label的情况可能不太实用,需要自己重新封装一下。原创 2020-09-20 17:58:34 · 20663 阅读 · 3 评论 -
【pytorch】torch.tensor的求导;矩阵求导;求二阶导;导数
本文讲解如何使用 pytorch进行求导原创 2020-09-16 18:24:45 · 18120 阅读 · 0 评论 -
【pytorch】向量、矩阵乘法
1 张量内积-torch.dot()torch.dot(input, tensor) → Tensor#计算两个张量的点积(内积)#官方提示:不能进行广播(broadcast).#example>>> torch.dot(torch.tensor([2, 3]), torch.tensor([2, 1])) #即对应位置相乘再相加tensor(7)>>> torch.dot(torch.rand(2, 3), torch.rand(2, 2))#报错,只允原创 2020-09-12 09:34:14 · 21889 阅读 · 5 评论 -
【pytorch】torch.tensor-np.array的转换
各有两种转换方式,一种是把pytorch.tensor 和对应 numpy放在同一个内存空间,改变tensor时numpy也会改变(The Torch Tensor and NumPy array will share their underlying memory locations (if the Torch Tensor is on CPU), and changing one will change the other.),另一种是单纯的copy,改变一个另一个不会发生变化。1.同内存转换1.1原创 2020-09-11 10:51:53 · 19426 阅读 · 0 评论