Torchmeta:PyTorch的元学习库

Torchmeta:PyTorch的元学习库

作者 | sharmistha chatterjee

来源 | Medium

编辑 | 代码医生团队

介绍

元学习研究和开放源代码库提供了一种通过标准化基准和各种可用数据集对不同算法进行详细比较的方法,从而可以完全控制此评估的复杂性。但是,大多数在线可用的代码都有以下限制:

数据管道通常特定于一个数据集,而对另一个数据集进行测试需要大量的返工。元学习中的基准测试由数据集组成,这给数据管道增加了一层复杂性。因此大多数元学习项目都实现了适合其方法的自己的特定数据加载组件。输入级别缺乏标准会导致围绕每种元学习算法的机制产生差异,从而使比较过程更具挑战性。

为了解决这个限制,Google AI引入了Torchmeta,这是一个基于PyTorch深度学习框架构建的库,可以对多个数据集的元学习算法进行无缝且一致的评估。为了解释Torchmeta,使用了一些初步的概念,例如DataLoader和BatchLoader,可以解释为:

DataLoader是一种通用实用程序,可用作应用程序数据获取层的一部分,以通过批处理和缓存在各种远程数据源(例如数据库或Web服务)上提供简化且一致的API。

批处理是DataLoader的主要功能。批处理加载函数接受键列表,并返回一个Promise,该Promise解析为值列表DataLoader合并在单个执行框架内发生的所有单个加载(一旦解决了包装承诺,即执行),然后是具有全部功能的批处理函数要求的钥匙。

Torchmeta具有以下功能。Torchmeta通过少量的分类和回归为大多数标准基准提供了DataLoader,并提供了新的元数据集抽象。数据加载器与PyTorch的标准数据组件完全兼容,例如Dataset和DataLoader。Torchmeta为所有可用的基准提供了相同的界面,从而使不同数据集之间的转换尽可能无缝。Torchmeta还对PyTorch进行了一些扩展,以简化与元学习算法兼容的模型的开发,其中一些需要更高阶的区分。可用的基准有助于为开发新的元学习算法提供参考。Torchmeta提供了一个框架,研究人员可以围绕该框架构建自己的元学习算法,而不是使数据管道适应其方法。Torchmeta通过将元数据集与算法本身解耦来促进代码重用,从而提供了这一抽象层。

数次学习的数据加载器

快速学习很少能具有使用先验知识快速推广具有有限监督经验的新任务的能力。快速学习分为三类:

数据使用先验知识来增强监督经验。该模型通过先验知识约束假设空间,算法使用先验知识来更改对假设空间中最佳假设参数的搜索。

Torchmeta在其库中具有以下内容。

该库提供了与元学习文献中经典的几次快照分类和回归问题相对应的数据集。该界面旨在支持分类和回归的数据集之间的模块化,以简化对全套基准测试的评估过程。

为了平衡几次学习中固有的数据缺乏,元学习算法从称为元训练集的数据集D-meta = {D1,…,Dn}中获取一些先验知识。在几次学习中,每个元素Di仅包含几个输入/输出对(x,y),其中y取决于问题的性质。由于这些数据集可以包含过去执行的不同任务的示例。Torchmeta提供了一种解决方案,可以使用最少的问题特定组件来自动创建每个数据集Di。

极少回归

少有的回归问题中的大多数是通过不同功能的输入和输出之间的简单回归问题,其中每个功能对应一个任务。这些功能被参数化以允许任务之间的可变性,同时在各个任务之间保持不变的“主题”。例如,这些函数可以是形式为fi(x)= ai sin(x + bi)的正弦波,其中a和b在某些范围内变化。

在Torchmeta中,元训练集继承自名为MetaDataset的对象,每个数据集Di(i = 1,…,n,用户定义n)对应于该函数的特定参数选择,所有在元训练集创建时采样一次的参数。一旦知道了函数的参数,我们就可以通过在给定范围内对输入进行采样并将其提供给函数来创建数据集。

少拍分类

对于少有的分类问题,数据集Di的创建通常遵循两个步骤:

前N个类别是从大量候选项中取样的(对应于“ N向分类”中的N)。在下一步中,每个班级选择k个示例(对应于“ k-shot学习”中的k个)。这是一个分为两步的过程,它是作为继承自MetaDataset的CombinationMetaDataset对象的一部分而提供的,它为用户提供了针对特定问题的大量类候选者的用户规范。为了促进元学习的可重复性,每个任务都与一个唯一的标识符(类标识符的N元组)相关联。选择任务后,对象将返回数据集Di以及来自相应类集中的所有示例。Torchmeta还包括一些有用的功能,以增加诸如旋转图像之类的变体来增加班级候选人的数量。

下图展示了元学习器的作用,在元测试中,另一个不相交的任务集Tt〜p(T)(p(T)->任务T的分布)用于测试元学习者。每个Tt都作用于N个数据集,其中数据集= {D train Tt,D test Tt}。学习者从训练集D train Tt和测试集D test Tt上学习。Tt的平均损耗被视为元学习测试误差。

Torchmeta:PyTorch的元学习库

训练和测试数据集拆分

在元学习中,每个数据集Di分为两部分:训练集(或支持集),用于使模型适应当前的任务;测试集(或查询集),用于评估和元优化。当任务保持不变时,这两个部分不会重叠,在训练和测试集中都没有任何示例。Torchmeta在数据集上引入了一个称为Splitter的包装器,该包装器负责创建训练和测试数据集,以及可选地对数据进行混排。

为了实例化基于Mini Imagenet的5向1发分类问题的元训练集,使用:

数据集= torchmeta.datasets.MiniImagenet(“数据”,num_classes_per_task = 5,meta_train = True,下载= True)

数据集= torchmeta.transforms.ClassSplitter(数据集,num_train_per_class = 1,num_test_per_class = 15,shuffle = True)

除了元训练集之外,大多数基准测试还提供了元测试集,用于对元学习算法的总体评估(以及可能的元验证集)。创建MetaDataset对象时,可以使用meta_test = True(或meta_val = True)而不是meta_train = True来选择这些不同的元数据集。

元数据加载器

可以迭代一些镜头分类和回归问题中的元训练集对象,以生成PyTorch数据集对象,该对象包含在任何标准数据管道(与DataLoader组合)中。

元学习算法在批次任务上运行效果更好。与在PyTorch中将示例与DataLoader一起批处理的方式类似,Torchmeta公开了一个MetaDataLoader,该对象可以在迭代时产生大量任务。这样的元数据加载器能够输出一个大张量,其中包含批处理中来自不同任务的所有示例,如下所示:

数据集= torchmeta.datasets.helpers.miniimagenet(“数据”,镜头= 1,方式= 5,meta_train = True,下载= True)

数据加载器= torchmeta.utils.data.BatchMetaDataLoader(数据集,batch_size = 16)

元学习模块

下图显示了使用学习者的损失和错误信号进行元学习的顺序步骤。

Torchmeta:PyTorch的元学习库

元学习者的学习步骤:来源:

LuckyCola工具库 LuckyCola工具库

LuckyCola工具库是您工作学习的智能助手,提供一系列AI驱动的工具,旨在为您的生活带来便利与高效。

LuckyCola工具库 19 查看详情 LuckyCola工具库

https : //arxiv.org/pdf/1904.05046.pdf

在元学习中,PyTorch中的模型是由称为模块的基本组件创建的,该基本组件等效于神经网络中包含该层的计算图及其参数的一层。这些模块将其参数视为其计算图的组成部分,足以训练带有反向传播的模型。

但是,一些元学习算法需要通过参数更新(例如梯度更新)进行反向传播,以进行元优化(或“外环”),因此涉及高阶微分。

因此,适应PyTorch中的现有模块至关重要,以便它们可以处理任意计算图来替代这些参数。因此,Torchmeta扩展了现有模块,并保留了提供新参数作为附加输入的选项。这些新对象称为MetaModule,它们的默认行为(即,未指定任何其他参数)等同于它们的PyTorch对应对象。否则,如果指定了额外的参数(例如,梯度下降的一步的结果),则MetaModule会将它们视为计算图的一部分,并且反向传播将按预期进行。

Torchmeta:PyTorch的元学习库

上图描述了带有或不带有附加参数的线性模块(称为MetaLinear)的扩展如何工作,以及对梯度的影响。左图显示了元模块作为参数W和b的容器的实例,以及带有占位符的重量和偏差参数的计算图。中间的图显示了MetaLinear元模块的默认行为,其中的占位符用W&b替换,这等效于PyTorch的Linear模块。右图显示了如何使用完整的计算图填充这些占位符,就像一个梯度下降步骤。在后一种情况下,外循环更新中必需的外循环相对于W的坡度可以正确地一直流到参数W。

下面的代码演示了如何从Torchmeta的现有数据集中生成训练,验证和测试元数据集。

代码语言:javascript代码运行次数:0运行复制

from torchmeta.datasets import Omniglot, MiniImagenet, CIFARFS, FC100, TieredImagenet, TCGAfrom torchmeta.transforms import Categorical, ClassSplitter, Rotationfrom torchvision.transforms import Compose, Resize, ToTensorfrom torchmeta.utils.data import BatchMetaDataLoader dataset = Omniglot("data",                   # Number of ways                   num_classes_per_task=5,                   # Resize the images to 28x28 and converts them to PyTorch tensors (from Torchvision)                   transform=Compose([Resize(28), ToTensor()]),                   # Transform the labels to integers (e.g. ("Glagolitic/character01", "Sanskrit/character14", ...) to (0, 1, ...))                   target_transform=Categorical(num_classes=5),                   # Creates new virtual classes with rotated versions of the images (from Santoro et al., 2016)                   class_augmentations=[Rotation([90, 180, 270])],                   meta_train=True,                   download=True)                   dataset = ClassSplitter(dataset, shuffle=True, num_train_per_class=5, num_test_per_class=15)dataloader = BatchMetaDataLoader(dataset, batch_size=16, num_workers=4)for batch in dataloader:    train_inputs, train_targets = batch["train"]    print('Train inputs shape: {0}'.format(train_inputs.shape))    # (16, 25, 1, 28, 28)    print('Train targets shape: {0}'.format(train_targets.shape))  # (16, 25)     test_inputs, test_targets = batch["test"]    print('Test inputs shape: {0}'.format(test_inputs.shape))      # (16, 75, 1, 28, 28)    print('Test targets shape: {0}'.format(test_targets.shape))    # (16, 75)

下图显示了下载后从Omnichlot和MiniImagenet从Torchmeta的数据集中生成的元学习数据集。

此处Omniglot数据集包含50个字母。将其分为30个字母的背景集和20个字母的评估集。在将背景大小调整为28x28张量后,应该使用背景集学习有关字符的一般知识(例如,特征学习,元学习)。此外,将标签传送到整数Glagolitic / character01”,“ Sanskrit / character14”,……)到(0,1,..,n)。

MiniImageNet包含60,000个84x84 RGB图像,每个类别600个图像。使用Torchmeta,可以生成HDF5格式的元学习数据集。

Torchmeta具有以HDF5格式下载数据集的功能,该功能允许:

要将包含HDF5文件的文件夹(包括子文件夹)用作数据源,在数据集中维护一个简单的HDF5组层次结构,启用延迟数据加载(即应DataLoader的请求),以便允许使用不适合内存的数据集,配备了数据缓存以加快数据加载过程,并且允许对源或目标数据集进行自定义转换。

Torchmeta:PyTorch的元学习库

用于定义Torchmeta数据集(例如Omniglot)的元学习参数的TieredImagenetClassDataset包含来自34个类别的图像。元训练/验证/测试拆分超过20/6/8个类别。每个类别包含10到30个类别。按类别划分(而不是按类别划分)可确保所有训练课程与测试课程完全不同(不同于Mini-Imagenet)。它带有以下一组参数,这些参数定义了训练,验证和测试数据集的划分以及应用于它们的转换和增强技术

num_classes_per_task(int):每个任务的类数,对应于“ N向”分类中的“ N”。

meta_train:bool(`False`):使用数据集的元火车拆分。如果设置为True,则必须将参数meta_val和meta_test设置为False。这三个参数中的一个必须正确设置为“ True”。

meta_val:bool(`False`):使用数据集的元验证拆分。如果设置为True,则参数meta_train和metatest必须设置为False。这三个参数中只有一个必须设置为“ True”。

meta_test:bool(`False`):使用数据集的元测试拆分。如果设置为True,则参数meta_train和meta_val必须设置为False。这三个参数中只有一个必须设置为“ True”。

meta_split:{'train','val','test'}中的字符串,可选要使用的拆分名称,如果所有三个都设置为False,则覆盖参数meta_train,metaval和metatest。

transform:可调用的,可选的:获取“ PIL”图像并返回转换后版本的函数/转换。

target_transform:可调用,可选:接受目标并返回转换版本的函数/转换。

dataset_transform:可调用,可选:函数/转换,它接受数据集(即任务),并返回其转换后的版本。-> torchmeta.transforms.ClassSplitter()。

class_augmentations:可调用的,可选的列表:使用新类扩展数据集的函数列表。这些类是现有类的转换。

download:bool(默认值:False)如果为True,则下载pickle文件并处理根目录(位于tieredimagenet文件夹下)中的数据集。如果数据集已经可用,则不会再次下载/处理数据集。

结论

在此博客中,了解了Google AI最新发布的库Torchmeta,它提供了哪些功能以及可以解决什么样的元学习问题。可以浏览其他PyTorch元学习库,例如元Agonistic机器学习,以学习可以快速适应新任务的网络初始化。

https://github.com/dragen1860/MAML-Pytorch

如下图所示,在Torchmeta中很少有镜头学习可用于图像分类。

Torchmeta:PyTorch的元学习库

参考

https://github.com/markdtw/meta-learning-lstm-pytorch

https://arxiv.org/abs/1909.06576

https://docs.graphene-python.org/en/latest/execution/dataloader/

以上就是Torchmeta:PyTorch的元学习库的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/367585.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月6日 06:06:27
下一篇 2025年11月6日 06:07:25

相关推荐

  • 2025香港加密货币交易所排名 安全可靠的十大虚拟币APP盘点

    选择一个安全、可靠且功能全面的加密货币交易所变得至关重要。对于身处香港的投资者而言,寻觅适合自身交易需求和风险偏好的平台,是进行数字资产配置的第一步。优质的交易平台不仅提供丰富的币种选择和流畅的交易体验,更在用户资产安全、合规运营和客户服务方面构筑了坚实的屏障。以下将深入探讨当前市场上表现卓越的几大…

    2025年12月8日 好文分享
    000
  • 一文读懂稳定币 稳定币有哪几种

    稳定币是加密世界的重要基石,它通过与美元等法定货币挂钩,提供了价值稳定的数字资产,解决了比特币等加密货币价格剧烈波动的问题。了解不同类型的稳定币及其运作机制,对于任何加密货币投资者或用户都至关重要。 2025年稳定币的交易所: 欧易:   币安:   火币: 什么是稳定币? 简单来说,稳定币是一种价…

    2025年12月8日
    000
  • ETH 在 DeFi 场景中的应用有哪些?收益路径梳理

    ETH 在 DeFi 场景中的应用有哪些?收益路径梳理 以太坊(eth)是去中心化金融(defi)生态的基础资产之一,其高流动性、强共识与智能合约支持,使其在多个 defi 应用中扮演核心角色。对于希望通过 eth 获取链上收益的用户,理解其在 defi 场景中的主要用途与路径,有助于合理布局资产、…

    2025年12月8日
    000
  • SOL 价格走势预测:2025 年是否能够再次爆发?

    SOL 价格走势预测:2025 年是否能够再次爆发? solana(sol)是近年来最受关注的高性能 layer 1 区块链之一,凭借高速低费的技术优势,已在 defi、nft 和游戏等多个赛道建立了活跃生态。随着 2024 年底新一轮牛市迹象出现,市场高度关注 sol 是否能在 2025 年再次实…

    2025年12月8日
    000
  • 新手刚入币圈避坑指南 给币圈新人炒币的建议2025

    踏入加密货币的世界既充满机遇也伴随着风险,对于新手而言,建立正确的投资观念和选择可靠的交易平台是成功的第一步。本指南将为你提供一系列核心建议,并推荐业内领先的交易平台,帮助你稳健起步,有效规避常见陷阱。 2025年主流的交易所: 欧易:   币安:   火币: 新手入门核心避坑法则 保持良好心态,拒…

    2025年12月8日
    000
  • 币圈风云人物有哪些?盘点2025年币圈十大风云人物

    随着加密货币市场进入新的发展阶段,行业领袖的言行对市场趋势、技术方向和监管格局产生着深远影响。了解这些关键人物的动向,不仅是洞察行业未来的窗口,也是投资者把握市场脉搏的重要参考。 2025年主流的交易所: 欧易:   币安:   火币: 2025年币圈十大影响力人物榜单 1. Vitalik But…

    2025年12月8日
    000
  • 稳定币是什么 2025市值最高的6大稳定币

    稳定币是加密货币世界中至关重要的“稳定器”,它通过锚定美元等法定货币,为波动的加密市场提供了一个价值稳定的避风港。本文将详细解释什么是稳定币,并为您盘点展望2025年时,可能占据市场主导地位的六大稳定币。 2025年稳定币主流的交易所: 欧易:   币安:   火币: 什么是稳定币?加密世界的“压舱…

    2025年12月8日
    000
  • web3.0应用有哪些?主要方向与案例

    Web3.0通过去中心化、用户数据主权和无需信任的价值交换重塑数字世界,截至2025年全球用户超1.5亿,链上资产突破3万亿美元,应用覆盖八大领域。1. DeFi以智能合约重构金融,TVL超800亿美元,涵盖去中心化交易所(如Uniswap手续费低至0.3%)、借贷平台(如Aave利率算法调整)和收…

    2025年12月8日
    000
  • 英国政策转向:批准散户交易加密货币ETN,意欲打造加密枢纽

    目录 社区对FCA解除加密交易所交易票据(cETN)禁令的反应 加密衍生品仍被禁止 英国支付协会(the payments association)的riccardo tordera向cointelegraph表示,禁令的解除使个人投资者能够自担风险自主决策。 英国金融行为监管局(FCA)已取消针对…

    2025年12月8日
    000
  • web1.0 2.0 3.0区别(包括其特点、联系、时间节点及举例)

    互联网历经Web 1.0、Web 2.0、Web 3.0三阶段,核心是从信息展示到用户互动再到价值归属的演进;1.0阶段(1990-2004)用户为被动消费者,数据与价值由平台掌控;2.0阶段(2005-2020)用户可创作内容但平台垄断数据,价值分配不均;3.0阶段(2020至今)通过区块链技术实…

    2025年12月8日
    000
  • 2025年十大主流币是哪些?币圈公认的主流币盘点

    随着数字货币市场的不断演进,主流币的定义也在动态变化,但其核心特征始终围绕着高共识、强技术、大市值和广泛的应用生态。本文将为您盘点和介绍2025年币圈公认的十大主流加密货币,帮助您清晰地了解当前数字资产领域的格局和核心价值所在。 2025年主流币的交易所: 欧易:   币安:   火币: 币圈公认的…

    2025年12月8日
    000
  • web3.0跟以太坊是什么关系?举一个浅显易懂的例子

    以太坊是Web3.0的底层技术引擎,通过1.智能合约实现自动化信任,2.去中心化账本保障用户数据主权,3.代币经济驱动价值流转,支撑Web3.0的去中心化生态;截至2025年,其承载76%的Web3.0应用,链上资产超2.3万亿美元,并以Decentraland为例展现NFT确权、DAO治理和去中心…

    2025年12月8日
    000
  • 小资金在币圈怎样实现千倍收益?币圈几千变百万的实战技巧

    在加密货币这个充满机遇与风险的领域,小额资金寻求千倍回报的故事总能点燃人们的热情。实现从几千到百万的跨越,并非单纯依靠运气,它是一场融合了认知、策略、执行力与心态的综合博弈。这条道路充满荆棘,需要参与者具备超乎常人的洞察力和坚韧不拔的毅力。 精准捕捉早期潜力项目 1、深入挖掘新兴叙事与赛道。市场的热…

    2025年12月8日
    000
  • Succinct (PROVE币) 价格预测:2025、2026、2027-2030 年

    目录 什么是Succinct(PROVE)哪些风险投资支持 Succinct (PROVE)?Succinct (PROVE) 的工作原理SP1 zkVM 和 Prover 网络OP Succinct技术跨链验证PROVE代币经济学代币详情2025、2026、2027-2030 年 Succinct…

    2025年12月8日 好文分享
    000
  • 什么是MOMOFUN(MM币)?是一个好投资吗?MM代币经济与前景分析

    目录 MOMOFUN 是什么?$MM 做什么?MOMOFUN背后的技术MOMOFUN 为何获得如此大的关注MOMOFUN与狗狗币对比重要新闻与事件$MM 是一项好的投资吗?MM币上线了哪些交易所MOMOFUN的未来结论常见问题解答部分 momofun ($mm) 是一个去中心化平台,被誉为全球首个基…

    2025年12月8日
    000
  • 币圈小资金快速翻倍的秘诀有哪些?

    在加密货币市场中,小额资金的持有者常常寻求能够让资产迅速增值的途径。这个领域以其剧烈的波动性而著称,其中蕴含着机会,也伴随着对等的风险。探索这些方法需要对市场有敏锐的洞察力、快速的执行能力以及严格的自我纪律。以下是一些在币圈被广泛讨论的策略,它们都围绕着如何利用小资金博取高回报的核心目标。 精准捕捉…

    2025年12月8日
    000
  • 几千块如何在币圈一年变几十万?

    在数字资产的浪潮中,将数千元的初始本金在一年内增长至数十万,是许多参与者津津乐道的话题。这个过程充满了机遇,同样也伴随着巨大的不确定性。实现这种跳跃式增长,往往需要对市场有深刻的理解、独特的策略以及强大的心理素质。它并非简单的买入持有,而是一系列复杂操作的综合结果。 精准捕捉市场热点 1、敏锐地识别…

    2025年12月8日
    000
  • 如何用几百块在币圈实现财富自由?

    用几百块的微薄本金,在波动巨大的加密货币市场中寻求财富自由,这个想法吸引着无数寻求高风险高回报的参与者。这条道路并非坦途,它充满了不确定性,要求参与者具备独特的眼光、极强的心理承受能力和一套异于常规的投资哲学。本金的限制决定了传统稳健的投资方式在此处几乎无效,人们转而探索那些可能带来指数级增长的边缘…

    2025年12月8日
    000
  • 币圈小白如何用几百块滚出十万财富?

    在数字货币的浪潮中,许多人怀揣着以小博大的梦想。用几百块的本金在币圈实现财富跃迁,这听起来像是天方夜谭,却又是这个高波动市场中不断上演的剧本。这个过程并非简单的运气游戏,它需要敏锐的洞察力、严谨的策略和超乎常人的耐心。对于一个初入币圈的小白,掌握正确的方法论,远比盲目跟风重要得多。 精准定位潜力赛道…

    2025年12月8日
    000
  • 几千本金如何在币圈翻百倍赚百万?

    在数字资产的世界里,以小博大的故事总是引人入胜。用几千元本金,通过百倍增长实现百万收益,这并非天方夜谭,但它要求参与者具备敏锐的洞察力、严谨的策略和强大的心理素质。这趟旅程充满了机遇,同样也遍布着风险。它不是一条简单的财富密码,更像是一场基于信息、认知和执行力的综合考验。 寻找百倍币的底层逻辑 1、…

    2025年12月8日
    000

发表回复

登录后才能评论
关注微信