当前位置: 首页
AI
【飞桨论文复现赛-小样本学习】MatchingNet

【飞桨论文复现赛-小样本学习】MatchingNet

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

【飞桨论文复现赛-小样本学习】matchingnet - 游乐网

一、前言

本项目为百度论文复现赛《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 - 游乐网        

论文主要解决:基于小样本去学习归类(或别的任务),并且这个训练好的模型不需要经过调整,也可以用在对训练过程中未出现过的类别进行归类。

MatchingNet的训练对象如下公式:

【飞桨论文复现赛-小样本学习】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
登录后复制    
来源:https://www.php.cn/faq/1426739.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
AI 的记忆不是硬盘——从 40 个真实 Bug 说起

AI 的记忆不是硬盘——从 40 个真实 Bug 说起

这是 AI 认知架构实战笔记 系列的第 2 篇 上一篇我们聊了「给 AI 写灵魂文件」这件事,这一篇,我们来看看,当这份灵魂文件真正运转起来之后,现实究竟会给我们带来多少“惊喜”——或者更准确地说,是漏洞。项目名为 WorkBuddy-Configure,已部署在 gitee 和 gitcode 上

时间:2026-04-03 17:56
OpenClaw给每个Agent单独指定workspace

OpenClaw给每个Agent单独指定workspace

OpenClaw中为每个Agent配置独立工作区的最佳实践 在大模型智能体协作平台上,实现多个Agent之间的文件隔离是确保项目管理井然有序的关键需求。如果您正在使用OpenClaw平台,为不同角色的智能体分配专属工作空间可以有效避免文件冲突、权限混乱等问题。本指南将详细介绍在OpenClaw中为每

时间:2026-04-03 17:15
OpenClaw更新操作

OpenClaw更新操作

前言 对于 OpenClaw 的忠实用户而言,每一次版本迭代都意义非凡。新功能密集、改动幅度大是它的显著特点,这固然令人欣喜,但伴随而来的更新操作也时常会遇到一些预料外的状况。本文旨在系统梳理我们在升级过程中遇到的常见问题与解决方案,帮助您在下次更新时更加顺畅,有效规避不必要的麻烦。 一、OpenC

时间:2026-04-03 17:14
openclaw源码

openclaw源码

项目资源与开源社区 对于希望深入研究OpenClaw技术生态的开发者与研究者,以下几个核心的开源仓库提供了关键的切入点和持续更新的资源集合。 首先,OpenClaw项目的主仓库位于: https: github com openclaw openclaw 这里是所有核心代码、文档和官方进展的枢纽,

时间:2026-04-03 17:02
关停 Sora 后 OpenAI 转身收购 TBPN 播客,亲自下场做媒体

关停 Sora 后 OpenAI 转身收购 TBPN 播客,亲自下场做媒体

OpenAI关闭Sora后战略转向:收购TBPN播客,深度布局内容生态 四月初的科技界新闻不断,一则来自科技媒体9to5Mac的报道引发了行业的强烈关注。OpenAI在近期宣布正式收购知名科技商业播客品牌The Browser Pane。这一战略动作紧随其视频应用Sora的停止运营之后,被外界普遍视

时间:2026-04-03 15:58
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜
热门教程
更多
  • 游戏攻略
  • 安卓教程
  • 苹果教程
  • 电脑教程