pytorch
蓝海渔夫
主要方向:图像分类,图像分割;兴趣:生成式AI;下半年目标两千粉
展开
-
pytorch实现胶囊网络(capsulenet)
胶囊网络分类结果不算差,在我的一些任务中train from scratch的胶囊网络就超越了imagenet1k上预训练过再finetune的vit。也超过了无预训练的VGG和resnet。(但是不如预训练过的vgg和resnet)。这样的表现放在2017年已经很能打了,没火的原因我感觉有两个:首先,由于胶囊网络迭代过程需要多次完整的特征图点乘特征图,所以内存消耗和时间消耗都是巨大的。我跑256的图时,24g显存的4090也只能把batch设置成5。另外一个原因可能是它的改进潜力不大。原创 2024-04-12 03:18:08 · 938 阅读 · 2 评论 -
比torchvision更强大,从timm库引用预训练模型和本地加载的方法
torchvision是大家最常用的预训练模型来源,但是其包含的预训练模型种类很少,往往并不能满足研究者们的需求。而timm库提供了一个更强大的替代选项。利用如下代码查询输出1032可知,timm内置了1032个预训练模型权重。例如ghostnet、caformer、crossvit等模型都是不在torchvision内的。原创 2024-03-30 07:45:30 · 1025 阅读 · 0 评论 -
如何用pytorch调用预训练Swin Transformer中的一个Swin block模块
1,首先,我们需要知道的是,想要调用预训练的Swin Transformer模型,必须要安装pytorch2,因为pytorch1对应的torchvision中不包含Swin Transformer。3,swin_b的模型结构如下(仅展示到第一个patch merging部分),在绝大部分情况下,我们可能需要的不是整个模型,而是其中的一个模块,比如SwinTransformerBlock。2,pytorch2调用预训练模型时,不建议使用pretrained=True,这个用法即将淘汰,会报警告。原创 2024-03-23 01:09:43 · 984 阅读 · 0 评论 -
训练保存模型checkpoint时报错SyntaxError: invalid syntax
因为我修改了一个超参数head_num,希望把这个超参数加入到checkpoint名称里,以区分每次训练保存的结果。于是增加了_{'headnum6'}。出错的原因,是 f-string 本身也是用单引号包围的,而我又在单引号内部又用了一次但引导,导致f-string产生了混淆,无法正确解析。所以只要把单引号替换成双引号就可以了。原创 2024-03-10 23:43:23 · 333 阅读 · 0 评论 -
pytorch实现分割模型TransUNet
TransUNet是一个非常经典的图像分割模型。该模型出现在Transformer引入图像领域的早期,所以结构比较简单,但是实际上效果却比很多后续花哨的模型更好。所以有必要捋一遍pytorch实现TransUNet的整体流程。首先,按照惯例,先看一下TransUNet的结构图:根据结构图,我们可以看出,整体结构就是基于UNet魔改的。原创 2024-03-10 22:02:15 · 4136 阅读 · 16 评论 -
不同框架表示图像时维度顺序的区别:pytorch、keras&tf、opencv、numpy、PIL
在TensorFlow中,对于图像数据,默认的维度顺序是 [H, W, C]。但在构建模型时,Keras允许通过data_format参数来指定维度顺序,可以是'channels_last'(即[H, W, C])或'channels_first'(即[C, H, W])。在PyTorch、Keras、OpenCV、NumPy和PIL这几个框架中,它们在表示图像时的维度存储顺序有所不同。PIL/Pillow在打开图像时,默认的维度顺序是 [W, H, C],即宽度、高度和通道数。原创 2024-03-09 09:35:35 · 641 阅读 · 0 评论 -
什么是deterministic training(确定性训练),pytorch如何实现
想要实现deterministic training,首先需要知道模型随机性的来源,有如下几个方面:初始化权重、数据加载的顺序、优化器的随机性、dropout、优化器的随机性(如随机梯度下降中的随机梯度选择)、CUDA的随机性等。deterministic training(确定性训练)是一种训练机器学习模型的方式,其主要特点是确保在相同的初始条件下,每次训练都会得到相同的结果。换句话说,确定性训练旨在消除随机性,使得模型的训练过程是可重复和可预测的。原创 2024-03-08 20:38:54 · 654 阅读 · 0 评论 -
分割模型TransNetR的pytorch代码学习笔记
nn.TransformerEncoder的参数包括:encoder_layer(用于构建模块的每个Transformer层),num_layer(堆叠的层数),norm(执行的标准化方法),apply(同上)。可以看出来,就是Transformer模块和残差连接相加,然后再经过一个residual模块处理。其中,x1,x2,x3,x4就是编码器模块,用的都是resnet50的预训练模块。其中r1,r2,r3,r4则是解码器的模块,就是上面实现的模块。这个代码就是简单的残差卷积模块,不赘述。原创 2024-03-08 19:57:21 · 571 阅读 · 0 评论 -
魔改检测模型RFBNet用作分类的实验,含pytorch代码
改进的思路很简单,首先图像输入vgg19的前两个stage,后接一个RFB模块,最后接全局池化和FC层。实验结果还是比VGG19强的,但是这种级别的实验想发论文是不可能的,只能发表在csdn上,哈哈。RFBNet是一个比较经典的图像分割模型,该模型使用了空洞卷积、多分支融合和残差的思路。一方面是好奇,是否能提升分类结果,其次也是作为pytorch代码的日常训练。因为我本身的研究方向只有分类和分割,不做检测。所以,我尝试把这个模块融入到分类模型中。原创 2024-03-04 16:49:28 · 423 阅读 · 0 评论 -
图像分割IoU loss损失函数的实现代码
Intersection over Union (IoU) loss是一种用于目标检测和图像分割任务的损失函数,它基于预测结果与真实目标之间的重叠程度来衡量模型性能。其原理是通过计算预测边界框(或分割掩模)与真实边界框(或分割掩模)之间的重叠区域占两者并集的比例,来评估模型的准确性。由于IoU越高,证明分割或者检测的效果越好,那么我们只要将其取反,就可以作为优化的目标。表示模型预测的边界框或分割掩模,表示真实的边界框或分割掩模,原创 2024-03-02 15:23:42 · 925 阅读 · 0 评论 -
图像分割模型R2UNet的pytorch实现代码
1,其中for循环这块就是recurrent的核心,通过将卷积层输出的结果和自身的输入相加,然后再次输入到本层的卷积之中,这样就实现了recurrent。最后,我需要提醒的是,这篇论文的结果是由争议的。我的复现只能保证理论上是正确的,最终跑出什么结果,不能保证。这里实现的是b,如果需要实现d,就在forward里把输入x也加到out上。这个模型把recurrent模块融入到UNet结构中的图像分割模型,至于效果见仁见智。3,原文中提到了两种种recurrent模块的结构,下图的b和d。原创 2024-03-02 11:06:57 · 478 阅读 · 0 评论 -
在pytorch实现机器学习代码时,self.children()的作用
如果我们把最后一句输出代码改成print(child),则会输出所有层的结构。3)在模型的训练过程中,你可能想要对不同的子层应用不同的正则化或优化策略。2)在模型的初始化阶段,你可能需要为特定的子层设置特定的参数初始化策略。1)在模型的前向传播中,你可能想要以某种方式迭代处理所有的子层。的实例)中所有子模块的迭代器。这些子模块可以是层(如。等),也可以是包含其他子模块的容器(如。是一个方法,它返回模型(通常是一个。当你定义一个复杂的神经网络模型时,原创 2024-02-26 16:37:33 · 288 阅读 · 1 评论 -
确认可跑的resnet18代码(pytorch)
注意:由于我这个代码是在cifar10上测试的,cifar10的图片尺寸只有16x16像素,非常小。因此,我注释掉了out = self.maxpool(out)这一行。网上对resnet18的实现很多,代码的布局和细微处都有差别,很多初学者看得眼花缭乱,而且浪费大量时间后代码可能还跑不起来。我下面这个代码原本也是从网上东拼西凑的,但是跑起来发现有很多错误。这是在cifar10上跑50轮时的结果,优化器是adam,lr=0.001.如果在较大尺寸的图片上使用这段代码,最好把这行代码加回来,效果更好。原创 2024-02-21 00:37:39 · 238 阅读 · 1 评论 -
pytorch手写数字识别的案例
整个代码可以分为数据、网络定义、loss、optimizer、训练和测试、模型保存这几个部分。原创 2023-11-24 18:45:03 · 202 阅读 · 1 评论 -
pytorch实现一个简单的回归模型
本文是一个使用pytorch实现简单回归模型的案例,供pytorch初学者参考。这只是一个案例,供学习参考,需要根据自己的数据特点写上相应的数据模块才能运行。获取数据、搭建模型、loss、optimizer、训练和测试、保存模型。原创 2023-11-23 21:59:42 · 55 阅读 · 0 评论 -
pytorch中有哪些节约显卡内存的方法
但需要注意的是,使用float16可能会导致数值不稳定的问题,因此需要使用一些技巧如梯度剪裁来避免这个问题。9,使用梯度检查点:梯度检查点是一种保存中间计算结果的技术,以便在反向传播时重复使用它们,而不是每次都重新计算它们。2,使用梯度累计:梯度累积是在每个训练步骤中计算梯度,但不立即更新模型参数,而是将多个步骤的梯度累积起来,然后一次性更新模型参数。5,删除不再使用的变量:在训练过程中不再需要的变量可以停止更新,例如使用torch.no_grad()来停止计算梯度。来清理不再需要的缓存。原创 2023-11-21 21:53:47 · 197 阅读 · 0 评论