96SEO 2026-02-23 12:09 27
。

思考#xff1a;在探究Dataset和DataLoader之前#xff0c;需要明白一个事情#xff0c;就是当我们不…本文从分类、检测、分割三大任务的角度来剖析pytorch得dataset和dataloader源码可以让初学者深刻理解每个参数的由来和使用并轻松自定义dataset。
思考在探究Dataset和DataLoader之前需要明白一个事情就是当我们不管做是分类、检测还是分割任务时我们的数据集一定由很多张图片组成的形状大小各异那麽我们在使用pytorch时图片是怎么以一个batch的形式进行打包的呢形状不同怎么处理数据格式有什么要求Dataset类中的初始化参数transform如何自定义并是怎么调用的在哪里调用训练时如何取出DataLoader中的数据的带着种种疑问开始Dataset和DataLoader的探索之旅吧Dataset探究Dataset的定义问题1Dataset到底是什么,如何去调用我们通常见到的Dataset的定义如下图VOCSegmentation()在这里其实是一个类。
voc_train
VOCSegmentation(F:\pytorch_yolov3\yolo3-pytorch,year2007,image_settrain,transformtransform,target_transformtarget_transform)自定义得Dataset类中必有三个函数__init__(),__getitem__(),__len__()函数__init__(self,...):是几乎类中都会有的一个初始化函数会在类进行实例化时初始化一些变量供类中其他函数使用__getitem__(self,
method,一般如果想通过使用索引访问元素时就可以在类中定义这个方法。
__len__()返回数据集的长度凡是在类中定义了这个__getitem__
运算时会调用类中的方法__getitem__。
返回值为处理过后的img和segclass
__init__(F:\pytorch_yolov3\yolo3-pytorch,year2007,image_settrain,transformtransform,target_transformtarget_transform):passdef
__len__(self):pass分类任务的Dataset自定义分类Datasetclass
默认以空格、换行(\n)、制表符(\t)进行分割大多是\imgs.append((words[0],
然后DataLoader中给index通过getitem读取图片数据self.transform
0~255在transfrom.totensor会除以255使像素值变成
参考https://blog.csdn.net/icamera0/article/details/50843172if
downloadFalse)参数解析root:为数据集的路径如果没找到本地路径配合download使用可以将download设置为True,会从网上为你下载数据train:是一个boolean类型参数用来定义数据使用的时train数据集还是test数据集如果train为True,就会将train数据集路径加载进来供后面读取数据使用。
download:boolean类型参数如果为True就会直接跳过本地数据集去网上下载下载后存放在当前工程目录下。
transform:可以是一个实例化对象也可以使用torchvison.transforms.Compose来包裹一个含有多个实例化转换类对象的列表注意非常重要的是掌握transform参数需要的参数类型是什么后面方便自己自定义transform在自定义tranform前先来看看pytorch官方自己定义的一些变换方法吧(变换都在torchvison.transforms.transforms.py中。
transform解析class
(size{0}).format(self.size)以CenterCrop为例可以看出是类的实现。
类中包含三个方法__init__(self,
img)为python的magic方法在类中实现这一方法可以使该类的实例对象像函数一样被调用。
默认情况下该方法在类中是没有被实现的。
使用callable()方法可以判断某对象是否可以被调用。
__repr__(self):支持打印功能可以使用print(实例化对象)返回变换类名包括初始化的一些参数信息。
class
__init__(self,name):self.namenamedef
#__call__()方法的作用其实是把一个类的实例化对象变成了可调用对象
#也就是说把一个类的实例化对象变成了可调用对象只要类里实现了__call__()方法就行。
Image所以一般是对图像做完各种图像变换之后再进行ToTensor()和Normalize()操作顺序很重要否则会报数据类型错误。
__call__(self,img)的具体实现F.center_crop(img,
self.size)在torchvision.transforms.functional.py中。
问题transforms中的compose为何可以以列表的形式接受各种变换代码解析class
transforms):#先批量初始化变换方法self.transforms
img):#__call__方法是python的魔法方法会#遍历list,得到第一个transforms.CenterCrop(10),每一个变换都是一个类CenterCrop(10)#对中心裁剪类进行了实例化真正调用__call__()方法是在__getitem__(self,
index)方法中#self.transform(img),返回变换后的img(循环顺序调用像是一个管道img从一边输入从另一边#另一边输出输出的图像已经变成了我们想要的模样)for
imgDataLoaderDataLoader的定义问题DataLoader到底是什么?DataLoader也是以类的方式实现的,DataLoader是一个可迭代对象,其类中实现了__iter__方法,因此在实例化DataLoader后,可以通过for循环的方式来迭代获取打包后的batch数据,在使用for循环遍历DataLoader时,会调用DataLoader里的__iter__方法,返回一个_SingleProcessDataLoaderIter(self)迭代器,后面每次迭代时会调用__next__方法获得下一批数据.def
collate_fnNone,pin_memoryFalse,
multiprocessing_contextNone):参数解析:dataset:自定义的数据集batch_size:每次喂入网络几张图shuffle:数据是否乱序sampler:一个采样器batch_sampler:以sampler为参数,在遍历dataloader时,会对采样器进行迭代产生一个batch的indexnum_workers:使用几个进程来加载数据,默认是0,由主进程来加载数据collate_fn:主要用来打包通过一个batch的index取到的数据,将img,target分开打包成tensorcollate_fn的参数可以自定义实现,因为pytorch官方提供的collate_fn函数只是将数据简单stack在一起,如果需要实现一些其他功能,可以自行定义,然后作为参数传给collate_fn.DataLoader案例Dataset和DataLoader的关系参考文献https://blog.51cto.com/u_15274944/2921682https://zhuanlan.zhihu.com/p/35698470https://zhuanlan.zhihu.com/p/27661382https://zhuanlan.zhihu.com/p/359998425https://blog.csdn.net/qq_28057379/article/details/115427052https://zhuanlan.zhihu.com/p/30385675https://cloud.tencent.com/developer/article/1728103https://ai.deepshare.net/p/t_pc/course_pc_detail/video/v_5e1694ec1470e_SJ7JwMgA?product_idp_5d552aea89dd9_CWCmRNUutype5
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback