当前位置: 首页 > news >正文

潍坊网站建设案例创建视频网站免费注册

潍坊网站建设案例,创建视频网站免费注册,网上购物商城系统er图,做免费资料分享网站会不会涉及版权Pytorch详解-数据模块 torch.utils.data.Dataset数据交互模块—Dataset的功能示例系列APIsconcatSubsetrandom_splitsampler unsqueeze DataLoaderDataLoader功能支持两种形式数据集读取自定义采样策略自动组装成批数据多进程数据加载自动实现锁页内存#xff08;Pinning Memo… Pytorch详解-数据模块 torch.utils.data.Dataset数据交互模块—Dataset的功能示例系列APIsconcatSubsetrandom_splitsampler unsqueeze DataLoaderDataLoader功能支持两种形式数据集读取自定义采样策略自动组装成批数据多进程数据加载自动实现锁页内存Pinning Memory DataLoader API transformstransforms 的常用方法自动数据增强 Dataset是一个抽象基类提供给用户定义自己的数据读取方式用户可以通过继承 Dataset 类并实现其方法来定制数据加载逻辑。其中最核心的方法是 getitem它定义了如何根据索引获取单个样本。 __getitem__(self, index):这个方法接收一个整数 index 作为输入。根据 index 加载并返回对应的数据样本。数据样本通常包括特征和标签可以是任何格式如图像、文本、音频等。返回值通常是元组 (sample, target)其中 sample 是特征数据target 是对应的标签。 DataLoader是pytorch数据加载的核心其中包括多个功能如打乱数据采样机制实现均衡1:1采样多进程数据加载组装成Batch形式等丰富的功能。 torch.utils.data.Dataset 数据交互模块—Dataset的功能 在Dataset类的编写中必须要实现的两个函数是__getitem__和__len__。 getitem需要实现读取一个样本的功能。通常是传入索引index可以是序号或key然后实现从磁盘中读取数据并进行预处理包括online的数据增强然后返回一个样本的数据。数据可以是包括模型需要的输入、标签也可以是其他元信息例如图片的路径。getitem返回的数据会在dataloader中组装成一个batch。即通常情况下是在dataloader中调用Dataset的getitem函数获取一个样本。len返回数据集的大小数据集的大小也是个最要的信息它在dataloader中也会用到。如果这个函数返回的是0dataloader会报错“ValueError: num_samples should be a positive integer value, but got num_samples0” 这个报错相信大家经常会遇到这通常是文件路径没写对导致你的dataset找不到数据数据个数为0。_init_ 方法初始化数据集通常在这里进行数据集的预处理或加载。 dataset负责与磁盘打交道将磁盘上的数据读取并预处理好提供给DataLoader而DataLoader只需要关心如何组装成批数据以及如何采样。采样的体现是出现在传入getitem函数的索引这里采样的规则可以通过sampler由用户自定义可以方便地实现均衡采样、随机采样、有偏采样、渐进式采样等。 示例 class PowerPredictionDataset(Dataset):def __init__(self, features, targets):self.features torch.tensor(features.values, dtypetorch.float)self.targets torch.tensor(targets.values, dtypetorch.float)def __len__(self):return len(self.features)def __getitem__(self, idx):return self.features[idx], self.targets[idx]系列APIs concat 在实际项目中数据的来源往往是多源的可能是多个中心收集的也可能来自多个时间段的收集很难将可用数据统一到一个数据形式。通常有两种做法一种是固定一个数据形式所有获取到的数据经过整理变为统一格式然后用一个Dataset即可读取。还有一种更为灵活的方式是为每批数据编写一个Dataset然后使用torch.utils.data.ConcatDataset类将他们拼接起来这种方法可以灵活的处理多源数据也可以很好的使用别人的数据及Dataset。 使用 ConcatDataset 的注意事项 索引: 当你从 ConcatDataset 中获取样本时索引会跨越所有的子数据集。例如如果 dataset1 有 50 个样本dataset2 有 30 个样本则 combined_dataset 将会有 80 个样本。索引 50 将指向 dataset2 中的第一个样本。数据一致性: 确保所有子数据集的样本具有相同的数据结构和类型。例如如果 dataset1 的每个样本都是一个字典那么 dataset2 也应该如此。转换: 如果你需要对数据应用转换例如图像增强确保所有子数据集都使用相同的转换逻辑或者在 ConcatDataset 外部处理转换。 Subset 用于从现有的 Dataset 中选取一部分样本形成一个新的数据集。这对于分割训练集、验证集或测试集非常有用。 Subset 类的关键方法 _init_ 方法 作用初始化 Subset指定基础数据集和要使用的索引。 参数 dataset: 基础的 Dataset 对象。indices: 一个整数列表表示从基础数据集中选择的样本索引。 _getitem_ 方法 作用根据索引从基础数据集中获取样本。 参数 idx: 在 Subset 中的索引。 _len_ 方法 作用返回 Subset 中的样本数量。 random_split 该函数的功能是随机的将dataset划分为多个不重叠的子集适合用来划分训练、验证集不过不建议通过它进行因为对用户而言其划分不可见不利于分析。 torch.utils.data.random_split(dataset, lengths, generatorNone)参数: dataset: 要分割的基础 Dataset 对象。lengths: 一个整数列表表示分割后每个子数据集的长度。generator: 一个可选的 torch.Generator 对象用于控制随机数生成器的状态以确保结果的可重复性。 返回: 一个包含分割后子数据集的列表。 sampler torch.utils.data.Sampler 是 PyTorch 中的一个抽象基类用于定义从数据集中抽取样本的方式。主要是设置挑选策略如按顺序挑选、随机挑选、按类别分概率挑选等等这些都可以通过自定义sampler实现。 Sampler 类的关键方法 _iter_ 方法 作用返回一个迭代器该迭代器会产生数据集中的样本索引。_len_ 方法 作用返回迭代器产生的索引的数量。 常用的 Sampler 类 RandomSampler: 作用随机抽取数据集中的样本索引。 参数 data_source: 数据集。replacement: 是否允许重复抽样默认为 False。 SequentialSampler: 作用按顺序抽取数据集中的样本索引。 参数 data_source: 数据集。 BatchSampler: 作用从另一个 Sampler 中抽取批次。 参数 sampler: 基础的 Sampler。batch_size: 每个批次的大小。drop_last: 如果最后一个批次的大小小于 batch_size 是否丢弃默认为 False。 WeightedRandomSampler: 作用根据给定的权重随机抽取样本索引。 参数 weights: 一个列表或张量包含每个样本的权重。num_samples: 抽取的样本数量。replacement: 是否允许重复抽样默认为 True。 SubsetRandomSampler: 作用从给定的索引列表中随机抽取样本索引。 参数 indices: 一个整数列表包含要抽取的样本索引。 DistributedSampler: 作用在分布式训练中使用确保每个进程获得不同的数据子集。 参数 dataset: 数据集。num_replicas: 总的进程数量。rank: 当前进程的编号。 unsqueeze 在PyTorch中unsqueeze 是一个用于增加张量维度的方法。 功能 unsqueeze(dim) 方法会在指定的维度 dim 处插入一个新的维度大小为1。 参数 dim (int) – 新的维度会被插入到这个位置上。 示例 如果有一个形状为 (3, 4) 的张量调用 .unsqueeze(0) 后其形状会变为 (1, 3, 4)。如果调用 .unsqueeze(1)则形状会变为 (3, 1, 4)。 这个方法非常有用尤其是在调整张量的维度以满足某些操作或模型输入的要求时。 DataLoader torch.utils.data.DataLoader(dataset, batch_size1, shuffleFalse, samplerNone, batch_samplerNone, num_workers0, collate_fnNone, pin_memoryFalse, drop_lastFalse, timeout0, worker_init_fnNone, multiprocessing_contextNone, generatorNone, *, prefetch_factor2, persistent_workersFalse)参数: dataset: Dataset 类型的对象包含要加载的数据。 batch_size: 每个批次的样本数量默认为 1。 shuffle: 是否在每个 epoch 开始时打乱数据集默认为 False。 sampler: Sampler 类型的对象用于定义从数据集中抽取样本的方式。 batch_sampler: BatchSampler 类型的对象用于定义从数据集中抽取批次的方式。 num_workers: 加载数据的子进程数量默认为 0表示在主线程中加载数据。 collate_fn: 一个函数用于合并一批次内的样本数据。 pin_memory: 是否将数据复制到 CUDA 的固定内存中以提高数据传输速度默认为 False。 drop_last: 如果最后一个批次的大小小于 batch_size 是否丢弃默认为 False。 timeout: 设置数据加载的超时时间单位秒。 worker_init_fn: 一个函数用于初始化每个子进程。 multiprocessing_context: 控制子进程的启动方式。 generator: 一个 torch.Generator 对象用于控制随机数生成器的状态。 prefetch_factor: 每个工作进程提前加载的批次数量。 persistent_workers: 是否在数据加载完成后保留子进程默认为 False。DataLoader功能 支持两种形式数据集读取 迭代器形式 在迭代器形式下DataLoader 会自动遍历整个数据集并按照指定的批次大小返回数据。这种方式适用于典型的训练循环其中数据集会被多次遍历每个 epoch 结束后数据集会被重新打乱如果设置了 shuffleTrue。索引形式 在索引形式下用户可以直接通过索引来获取特定批次的数据。这种方式适用于需要对数据集进行更细粒度控制的情况例如在调试阶段或者需要手动控制数据流的情况。 自定义采样策略 DataLoader可借助Sampler自定义采样策略包括为每个类别设置采样权重以实现1:1的均衡采样或者是自定义采样策略。 自动组装成批数据 mini-batch形式的训练成为了深度学习的标配如何把数据组装成一个batch数据DataLoader内部自动实现了该功能并且可以通过batch_sampler、collate_fn来自定义组装的策略十分灵活。 如果你需要对数据进行特殊的批处理逻辑可以通过定义 collate_fn 函数来实现。collate_fn 函数接收一个样本列表并返回一个批次数据。例如如果数据集中的每个样本是一个字典你可以定义一个 collate_fn 函数来将这些字典合并成一个批次。 多进程数据加载 通常GPU运算消耗数据会比CPU读取加载数据要快CPU“生产”跟不上GPU“消费”因此需要多进程进行加载数据以满足GPU的消费需求。通常指要设置num_workers 为CPU核心数如16核的CPU就设置为16。 自动实现锁页内存Pinning Memory Pinning Memory是空间换时间的做法将指定的数据“锁”住不会被系统移动交换到磁盘中的虚拟内存因此可以加快数据的读取速率。 简单的可以理解为常用的衣服就“锁”在你的衣柜里某些时候如夏天暂时不用的衣服——冬季大衣则会移动到收纳柜里以腾出空间放其它常用的衣服等到冬天来临需要用到大衣的时候再从收纳柜里把大衣放到衣柜中。但是冬天拿大衣的时候就会慢一些如果把它“锁”在你的衣柜那么冬天获取它的时候自然快了但占用了你的空间。这就是空间换时间的一个例子。 DataLoader API dataset它是一个Dataset实例要能实现从索引indices/keys到样本的映射。即getitem函数batch_size每个batch的样本量 shuffle是否对打乱样本顺序。训练集通常要打乱它验证集和测试集无所谓。sampler设置采样策略。batch_sampler设置采样策略batch_sampler与sampler二选一。num_workers 设置多少个子进程进行数据加载data loadingcollate_fn组装数据的规则 决定如何将一批数据组装起来。pin_memory是否使用锁页内存。drop_last每个epoch是否放弃最后一批不足batchsize大小的数据即无法被batchsize整除时最后会有一小批数据是否进行训练如果数据量足够多通常设置为True。这样使模型训练更为稳定大家千万不要理解为某些数据被舍弃了因为每个epochdataloader的采样都会重新shuffle因此不会存在某些数据被真正的丢弃。 transforms 数据增强Data augmentation已经成为深度学习时代的常规做法数据增强目的是为了增加训练数据的丰富度让模型接触多样性的数据以增加模型的泛化能力。 通常数据增强可分为在线(online)与离线(offline)两种方式离线方式指的是在训练开始之前将数据进行变换变换后的图片保存到硬盘当中在线方式则是在训练过程中每一次加载训练数据时对数据进行变换以实现让模型看到的图片都是增强之后的。实际上这两种方法理论上是等价的一般的框架都采用在线方式的数据增强pytorch的transforms就是在线方式。 transforms是广泛使用的图像变换库包含二十多种基础方法以及多种组合功能通常可以用Compose把各方法串联在一起使用。大多数的transforms类都有对应的 functional transforms 可供用户自定义调整。transforms提供的主要是PIL格式和Tensor的变换并且对于图像的通道也做了规定默认情况下一个batch的数据是(B, C, H, W) 形状的张量。 transforms 的常用方法 Resize将图像缩放到指定大小。 RandomHorizontalFlip随机水平翻转图像。 ToTensor将 PIL.Image 或 numpy.ndarray 转换为 Tensor。 Normalize对图像进行标准化处理。 RandomCrop随机裁剪图像。 ColorJitter随机改变图像的颜色。 Compose组合多个转换。PyTorch 不仅可设置对数据的操作还可以对这些操作进行随机选择、组合让数据增强更加灵活。具体有以下4个方法 Lambda Lambda 允许用户自定义转换函数。这对于实现一些特定的转换逻辑非常有用例如自定义的数学运算或者特定的数据处理操作。 RandomChoice RandomChoice 从给定的一组转换中随机选择一个应用。这对于数据增强非常有用因为它可以增加训练数据的多样性。 RandomOrder RandomOrder 会随机改变转换的执行顺序。这对于确保转换之间的顺序不固定增加数据增强的随机性非常有用。 RandomApply RandomApply 以一定的概率应用一组转换。这对于控制数据增强的强度非常有用可以通过调整概率来控制转换是否被应用。 自动数据增强 自动数据增强的基本思想是将数据增强策略的选择视为一个优化问题通过某种搜索算法来找到最优的数据增强策略。常见的搜索算法包括强化学习、遗传算法、贝叶斯优化等。 AutoAugment由 Google 提出的一种方法使用强化学习来搜索最佳的数据增强策略。它定义了一个搜索空间其中每个策略由多个子策略组成每个子策略包含两个操作及其对应的强度。Fast AutoAugment一种加速版本的 AutoAugment 方法通过使用代理任务来减少搜索时间。RandAugment一种简化版的自动数据增强方法它随机选择一系列操作并调整其强度以减少搜索时间和计算资源的需求。Policy Search使用其他搜索算法如遗传算法、贝叶斯优化等来寻找最佳的数据增强策略。 参考https://tingsongyu.github.io/PyTorch-Tutorial-2nd/chapter-3/ 参考https://pytorch-cn.readthedocs.io/zh/latest/ 参考https://datawhalechina.github.io/thorough-pytorch/
http://www.w-s-a.com/news/740324/

相关文章:

  • 公司域名查询官方网站女教师遭网课入侵直播录屏曝
  • 网站开发社交网络功能的作用腾讯公司网站
  • 网站建设需要微信账号和密码网站建设工作汇报
  • 国家城乡住房和建设部网站西安私人网站
  • 天津高端网站定制seo实战教程
  • 网站文章怎么做才能被快速收录网站备案核验系统
  • 子网站建设方案l建设银行网站
  • 免费看舆情网站网站备案用户名忘了怎么办
  • 地方门户网站的分类网站的方案
  • 沧州哪里做网站网站的建设是什么
  • 设计公司海报秦皇岛seo网站推广
  • 网站导航规划wordpress做漫画
  • jsp体育用品网站建设wordpress 10万篇文章
  • 沈阳做微信和网站的公司网站在线支付接口
  • 重庆整合网络营销百度seo快速提升排名
  • 设计师网站外网百度分析工具
  • 旅游网站建设技术解决方案wordpress主题安装后找不到
  • 网站图片文字排版错误管理系统界面设计
  • 网站建设 台州广州惠科互联网技术有限公司
  • 网站页面尺寸大小四川鸿业建设集团网站
  • 做女朋友的网站局网站建设方案word
  • 做阿里国际网站会有成效吗科技网站有哪些
  • 高端公司网站建设北京两学一做网站
  • 黄埔网站建设设计wordpress 文件夹改名
  • 怎么什么软件可以吧做网站最火的二十个电商app
  • wordpress theme sage网站seo优化加推广
  • 建设一个大型电影网站公司网站建设工作总结
  • 传奇网站一般怎么做的宇泽佛山网站建设
  • google网站入口电商运营十大基础知识
  • 建设公司网站的细节中国建设网网站