【飞桨论文复现赛-小样本学习】MatchingNet
本文是百度论文复现赛中《Matching Networks for One Shot Learning》的复现代码说明。基于paddlepaddle-gpu2.2.2和python3.7环境,在miniImageNet数据集上完成。复现的5-way 1-shot和5-shot准确率分别为48.3%、62.2%,超论文原结果。介绍了模型背景、数据集、运行步骤、对比试验及复现心得。

一、前言
本项目为百度论文复现赛《Matching Networks for One Shot Learning》论文复现代码。
依赖环境:
paddlepaddle-gpu2.2.2python3.7在miniImageNet数据集下训练和测试。
5-way Acc:
二、模型背景及其介绍
参考论文:《Matching Networks for One Shot Learning》论文链接
在这项工作中,论文采用了基于深度神经特征的度量学习和利用外部记忆增强神经网络的最新进展。论文中框架学习了一个网络,它将一个小的带标签的support set和一个未带标签的示例映射到本身的标签上,从而避免了调整以适应new class类型的需要。然后我们定义了视觉(使用Omniglot, ImageNet)和语言任务的one-shot学习问题。与其他方法相比,论文算法在ImageNet上的one-shot精度从87.6%提高到93.2%,在Omniglot上从88.0%提高到93.8%。
模型结构如下:
论文主要解决:基于小样本去学习归类(或别的任务),并且这个训练好的模型不需要经过调整,也可以用在对训练过程中未出现过的类别进行归类。
MatchingNet的训练对象如下公式:
其中,一个 batch 有多个任务,一个任务有一个支持集合一个测试样本,一个支持集有多个样本对。模型应用到新的类别时不需要进行微调,是因为模型学到的是一种映射的方法,
参考论文博客
参考项目地址 复现github地址
三、数据集
2016年google DeepMind团队从Imagnet数据集中抽取的一小部分(大小约3GB)制作了Mini-Imagenet数据集,共有100个类别,每个类别都有600张图片,共60000张(都是.webp结尾的文件)。
Mini-Imagenet数据集中还包含了train.csv、val.csv以及test.csv三个文件。
train.csv包含38400张图片,共64个类别。val.csv包含9600张图片,共16个类别。test.csv包含12000张图片,共20个类别。每个csv文件之间的图像以及类别都是相互独立的,即共60000张图片,100个类。
四、运行
本项目5-way分类可设1-shot和5-shot。如果用5-shot可设置--n_shot 5,用1-shot可设置--n_shot 1。下面以5-shot为例。
解压miniImagenet数据集到./filelists目录下用于训练
In [1]#加载miniImagenet数据集%cd /home/aistudio/work/Paddle-MatchingNet/filelists/!unzip -oq /home/aistudio/data/data138415/miniImagenet.zip登录后复制
/home/aistudio/work/Paddle-MatchingNet/filelists登录后复制
1、训练
训练的模型保存在./record目录下
训练的日志保存在./logs目录下
In [ ]%cd /home/aistudio/work/Paddle-MatchingNet/!python3 train.py --n_shot 5登录后复制
2、保存特征
将提取的特征保存在分类层之前,以提高测试速度。
加载./record目录下的模型进行特征保存
In [ ]# 可加载预先训练好的模型文件到./record目录下%cd /home/aistudio/work/Paddle-MatchingNet/record/!unzip -oq /home/aistudio/data/data140016/checkpoint_matchingnet.zip登录后复制 In [ ]
%cd /home/aistudio/work/Paddle-MatchingNet/!python3 save_features.py --n_shot 5登录后复制
3、测试
测试之前执行!python3 save_features.py预先提取特征
这里展示5-shot测试结果
In [15]%cd /home/aistudio/work/Paddle-MatchingNet/!python3 test.py --n_shot 5登录后复制
/home/aistudio/work/Paddle-MatchingNetW0418 20:57:16.315918 1841 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1W0418 20:57:16.321213 1841 device_context.cc:465] device: 0, cuDNN Version: 7.6./opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/framework/io.py:415: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working if isinstance(obj, collections.Iterable) and not isinstance(obj, (600 Test Acc = 62.83% +- 0.73%登录后复制
五、代码结构
├─data # 数据处理包├─filelists # 数据文件├─methods # 模型方法├─logs # 训练日志├─record # 训练保存文件 │ configs.py # 配置文件│ README.md # readme│ save_features.py # 保存特征│ train.py # 训练│ test.py # 测试登录后复制
六、对比试验
原论文中没有对miniImageNet做数据增强,本次复现也默认未做数据增强。本项目对是否采用数据增强做了对比实验。 结果如下:
发现做数据增强的MatchingNet出现了精度下降的情况,可参考论文复现ProtoNet的分析,项目中有设置train_aug是否做数据增强,可自行测试。
七、复现心得
本项目参照小样本方向论文baseline给出的repo代码复现。复现过程中遇到一个比较大的问题是dataloader的设计编写,原repo设计dataloader采用了iter迭代方式,每次next的是一个sub_dataloader()。我用相同的方式使用paddle复现后,发现内存无限的增长。这个问题一直困扰,最后放弃了原repo使用sub_dataloader()的方式,采用普通的dataloader()的方法。下面给出部分实现SetDataset()的方案代码:
def __getitem__(self, i): index = self.cl_list[i.item()] sub_data = np.array(self.sub_meta[index]) ri = np.random.permutation(len(sub_data)) sf_sub_data = sub_data[ri][:self.batch_size] imgs = [] targets = [] for ssd in sf_sub_data: image_path = os.path.join(ssd) img = Image.open(image_path).convert('RGB') img = self.transform(img) target = paddle.to_tensor(self.target_transform(index)) imgs.append(img) targets.append(target) imgs = paddle.stack(imgs, axis=0) targets = paddle.stack(targets, axis=0) return imgs, targets登录后复制 相关攻略
Trae在Python数据分析与机器学习项目中主要通过四种方式提供支持:利用Auto模式自动生成并执行端到端分析脚本;通过AgentCLI命令行自动化机器学习建模流程;对现有代码进行智能调试与优化;借助语音交互快速构建数据处理函数。这些功能覆盖了从需求描述到代码生成、模型构建及代码优化的全流程。
在Python编程中,你是否也曾编写过类似的统计代码? 统计词频 count = {} for word in words: if word in count: count[word] += 1 else: count[word] = 1 实际上,这种高频的计数需求,完全可以通过Python内置
Trae稳定支持Python3 10至3 13版本,3 9及以下版本无法运行。Python3 14处于实验性支持阶段,核心功能可能受限。当存在多个3 10以上版本时,Trae优先选择虚拟环境中的解释器,其次为最高系统版本。此外,Trae仅兼容64位Python解释器,不支持32位架构。
在企业级数据采集与自动化运维实践中,IT团队普遍面临一个核心挑战:Python爬虫为何频繁报错,修补维护何时才能终结?随着前端技术演进与动态反爬机制的日益复杂,依赖DOM解析的传统爬虫脚本往往陷入“部署即过时,运行即异常”的困境。本文将深入解析传统爬虫代码脆弱性的根本原因,并系统介绍一种能够重塑数据
很多刚接触Docker的开发者常有一个误解:制作镜像不就是把源代码打包进去就行了吗?实际上,在企业级的标准化开发流程中,直接将源码打包进Docker镜像是非常不专业的做法。这会导致镜像体积臃肿、引入潜在安全风险,并且模糊了“构建环境”与“运行环境”的边界。本文将深入解析Java、Vue、Go、Pyt
热门专题
热门推荐
英特尔下一代TitanLake处理器全系支持LPDDR6内存。面向主流笔记本的U、P及高能效PX系列还将兼容LPDDR5X与DDR5,为设备设计提供灵活性。U、P、PX系列采用Intel18A工艺的新CPU模块,而B、BX系列沿用旧架构。高端PX系列集成GPU采用台积电N2P工艺,配备16个Xe核心,旨在提升图形性能。
一只鲸鱼做空比特币 4 96 亿美元,触发市场公信讨论 最近,链上数据捕捉到的一笔大额交易,瞬间吸引了所有市场参与者的目光:一只比特币巨鲸,悄然开立了价值近5亿美元的空单。这笔操作如同一块投入平静湖面的巨石,不仅激起了短线的价格波澜,更将市场深层的公信机制与交易透明度问题,再次推到了讨论的中心。 鲸
解锁《四海兄弟》“故乡没那么快”成就需耐心探索:深入隐秘角落,留意环境细节;积极与居民互动,收集对话线索;完成相关支线任务,关注伏笔;并注意特定时段触发的事件。成就进度可累积,坚持全面探索方能最终达成。
鬼谷子是战术型辅助,核心在于技能运用与合理出装。二技能是关键控制,配合大招的群体伪装可发起突袭。出装以冷却缩减和生存能力为主,如冷静之靴、极寒风暴和魔女斗篷。实战中需把握进场时机,从侧翼切入控制敌方核心,并注意与队友配合衔接伤害。
在游戏开发、动画制作、视频创作等数字内容领域,专业音效设计是提升作品沉浸感与专业度的关键。然而,传统音效制作流程往往依赖昂贵的专业设备与庞大的素材库,对独立开发者、小型团队及个人创作者构成了较高的技术门槛与成本压力。近期,一款名为OptimizerAI的人工智能音效生成平台备受关注,它致力于通过AI





