复现maml论文模型-3

两个图像数据集的分类模型的训练代码还没有深入看,先给出实验的一些参数对应的训练效果。
数据集下载
链接:https://pan.baidu.com/s/1hcdzRB0BVRwh3Ei4VO2SNQ
提取码:fmrv

一、数据和参数分析

1.数据集
Omniglot数据集.png

MiniImagenet数据集.png
2.基础模型设计在原论文第五章第二小节,我还未细看
3.损失函数
损失函数.png
4.原论文的实验参数
实验参数.png

整理后的参数
4.1 Omniglot


Omniglot实验参数.png

4.2 MiniImagenet


MiniImagenet实验参数.png

5.实验结果
实验结果.png

二、Omniglot

又回到readme

readme.png

需要先执行一下data/omniglot_resized/resize_images.py
这个python文件头部告诉了我们怎么放置这个数据集,但是可能有些文件夹层数的关系,没找到对应文件,所以我稍微修改了下源代码,修改如下:
第一处,resize_images.py

image_path = '*/*/*/'

第二处,data_generator.py
class DataGenerator->def init->elif 'omniglot' in FLAGS.datasource->character_folders(这是一个变量)

character_folders = [os.path.join(data_folder, family, character_dir, character) \
                for family in os.listdir(data_folder) \
                if os.path.isdir(os.path.join(data_folder, family)) \
                for character_dir in os.listdir(os.path.join(data_folder, family)) \
                if os.path.isdir(os.path.join(data_folder, family, character_dir))
                for character in os.listdir(os.path.join(data_folder, family, character_dir))]

开始训练
我的笔记本是:windows10,cpu是Intel(R) Core(TM) i7-8550U CPU @1.80GHz 1.99GHz,内存8g
在不开其他应用的条件下,在命令提示符终端只能跑5way-1shot的实验,其它的在内存达到98%,99%时就自动被杀掉了。这个实验跑的时间大概是2天左右,我总感觉它可能跑着跑着就停了,但是可能在计算中吧(模型训练进度好像可以可视化,但是我还没有试,包名是tqdm)。实验结果:
第一行数据是0~10次少量数据更新权值后计算测试集对应的准确率accuracy;
第二行数据是0~10次少量数据更新权值后计算测试集对应的标准差;
第三行数据0~10次少量数据更新权值后计算测试集对应的95%置信度。

5way1shot实验结果.png

之后没跑起来5way5shot的实验,我只是尝试改了上文中表格中的部分参数(也就是命令行提供的参数),但是似乎问题不在那,而在生成数据上,代码运行往往卡在下图这个位置。
实验进行不下去的地方.png

但是我并没有尝试去改源码中的一些参数,而将代码迁移到centos7上去跑模型了(因为可以返校了;跑着模型的笔记本真的啥也不能干)。
我的主机信息,cpu:Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz, 内存8g(在跑代码时我禁用了图形界面,使用字符界面)
在cpu上跑了5way5shot,大概用了一天半左右的时间,结果如下图:
5way5shot实验结果.png

之后因为觉得耗时有点长,所以打算使用GPU,这部分环境的搭建,在这篇博客中:https://www.jianshu.com/p/52570d1e70b2
其余两个20way1shot和20way5shot时间差不多都在半天左右的时间,实验结果分别如下图:
20way1shot实验结果.png

20way5shot实验结果.png

其实20way5shot是最后一个训练好的模型,因为一直跑不起来,经过我的简单计算,以及小测试,将上面提到的源码中的参数修改了一下,
源码参数修改.png

这个参数按照我的理解,就是和创建的总数据集个数相关,命令行中的meta-iterations指的是number of metatraining iterations,这个数乘以meta_batch_size(number of tasks sampled per meta-update)是训练所用到的任务数量。而刚才的参数num_total_batches可根据meta_batch_size的不同,组合成一个个训练batch。比如,这里源码中的num_total_batches=200000,假设训练任务是20way-1shot,meta_batch_size=16,meta-iterations=60000,那么训练时一个batch的16个任务,就是从200000个数据集任意挑出16个,一共需要随意挑选60000次。那么刚刚说20way5shot一直跑不起来,而20way1shot可以跑起来,我就进行了简单的计算:(200000*20*1)/(20*5)=40000,因为不知道上限是多少,所以我用了50000进行训练,结果是跑了起来。
这步,也就是Generating filenames 过去了,但是代码继续向下进行,又卡在了这里,
命令行参数修改.png

看原因,和examples_per_batch,batch_size两个参数有关系,examples_per_batch是和我们当前的训练任务,就是NwayKshot有关,所以不能更改,只能修改batch_size,也就是命令行参数meta_batch_size。同样和已经跑起来的20way1shot比较,结合源码中的计算公式capacity=min_queue_examples + 3 * batch_image_size,把图中的min_queue_examples = 256省略,简单计算来看,就是(3*20*1*16)/(3*20*5) = 3.2,就约等于3(这里因为已经试了好多次,所以就没有测试最可用的值,直接用了计算得到的可用值3)
因此,Omniglot数据集上我用的训练命令行参数如下:
命令行参数.png

三、MiniImagenet

同样地,按照readme执行对应的预处理数据集的python文件,proc_images.py,但是这个文件也是不能直接运行的。我的数据预处理都是在windows下进行的,这个文件适用于linux系统,所以做了如下修改(主要就是创建文件夹,改名字,在windows上直接用函数,而在linux上os.system()直接执行命令):

预处理源码修改.png

使用GPU环境进行训练,大概也是半天时间(就是前一天的下午或晚上开始训练,第二天早上就训练完成),训练结果如下:


5way1shot实验结果.png

5way5shot实验结果.png

(5way5shot也修改了源代码参数num_total_batches = 50000)

四、结果对比

实验结果对比.png

分析上面的结果,基本接近论文的实验结果,说明了该论文实验结果的可重复性。从深入回归任务部分的代码,可以看出maml模型(gradient by gradient)相较于预训练模型,得到了更优的模型初始化参数。
文中还提到了一阶求导和二阶求导的性能对比


一阶导&二阶导.png

公式推导.png

从性能对比来看,二阶导并没有有效提升性能,同时二阶导的计算也增加了计算时间。

最近还要忙着找工作,得开始刷题了,所以把这段时间做的东西稍稍总结一下,下次要接着做也能有个回顾的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345