mxnet代码:

https://github.com/CanyonWind/Single-Path-One-Shot-NAS-MXNet

NAS Model FLOPs # of Params Top - 1 Top - 5 Σ Normalized Scores Scripts Logs
OneShot+ Supernet 841.9M 15.4M 62.90 84.49 7.09 script log
OneShot-S+ (ours) 291M 3.5M 75.75 92.77 1.9166 script log
OneShot+ (ours) 297M 3.7M 75.24 92.58 1.9937 script log
OneShot (ours) 328M 3.4M 74.02* 91.60 2 script log
OneShot (official) 328M 3.4M 74.9* 92.0 2 - -
FBNet-B 295M 4.5M 74.1 - 2.19 - -
MnasNet 317M 4.2M 74.0 91.8 2.20 - -
DARTS 574M 4.7M 73.3 91.3 3.13 - -
NASNET-A 564M 5.3M 74.0 91.6 3.28 - -
PNASNET 588M 5.1M 74.2 91.9 3.29 - -

torch实现:

https://github.com/xieydd/Pytorch-Single-Path-One-Shot-NAS/blob/master/model/network.py

以下内容转自:

https://blog.csdn.net/weixin_41481113/article/details/88415546

传统观点一般认为深度神经网络通常比较擅长从高维数据中学习,例如图像或者语言,但这是建立在它们有大量标记的样本来训练的情况下。然而,人类却拥有单样本学习的能力--如果你找一个从来没有见过小铲刀的人,给它们一张小铲刀的图片,他们应该就能很成功的将它从其他厨房用具里面鉴别出来。

(从来没有进过厨房?现在你有机会来测试一下你的单样本学习能力了!右边图像中,哪个是与左边大图片相同类别的?)

这是一个人们认为很容易的飞起,但是直到我们想写一个算法让它去做这件事。。。(那就GG了) 很明显,机器学习系统很希望拥有这种快速从少量样本中去学习的能力,因为收集和标记数据是一个耗时费力的工作。我认为这是通往通用人工智能的漫漫长路中很重要的一步。

最近涌现出来很多有趣的基于神经网络的单样本样本学习论文,它们已经得到了一些不错的结果。这是一个让我激动的新领域,所以我想去对它做一个简要介绍,来让深度学习新手更好的认识它。

在这篇博客中,我想:

  • 介绍并定义单样本学习问题
  • 描述单样本分类问题的基准,并给出一个其性能的baseline
  • 给出一个少样本学习的例子并部分的实现这篇论文中提到的模型
  • 指出一些大家通常不会想到的小点子

关于数据集Omniglot!

Omniglot数据集拥有50种,1623类手写字符。对于每类字符仅有20个样本,每个样本分别由不同的人绘制而成,分辨率为105*105

上面是omniglot数据集的一些例子,如图所示,这里有很多种字符 如果你喜欢机器学习,你肯定听说过MNIST数据集.Omniglot有时被成为mnist的转置,因为它有1623类字符,每类只有20个样本,相比mnist的10个类别,每个类别都有上千样本,正好相反。omniglot还有创作的笔画数据,但是我们这里用不到它。通常,我们把样本分为30类训练样本,剩下20类作为评估。所有这些不同的字符可以组成很多种单样本学习任务,所以它确实是一个单样本学习的一个很好的评估标准。

一个单样本学习的baseline--1近邻

最简单的分类方式是使用k近邻方法,但是因为每个类别只有一个样本,所以我们需要用1近邻。这很简单,只需要计算测试样本与训练集中每个样本的的欧式距离,然后选择最近的一个就可以了:

根据Koch等人的论文,在omniglot数据集中的20类上,单样本分类,1-nn可以得到大约28%的精度,28%看起来很差,但是它已经是随机猜测(5%)的6倍精度了。这是一个单样本学习算法最好的baseline或者“合理性测试”了。

Lake等人的Hierarchical Bayesian Program Learning,层次贝叶斯程序学习(以下简称HBPL)得到了大约95.2%的精度,非常不错。我只看懂了30%,但它非常有趣,它与深度学习直接从原始像素上训练相比,是风马牛不相及的,因为:

  • HBPL使用笔画数据,而不是仅仅用原始像素
  • HBPL在omniglot数据集上学习一个笔画的生成模型,这个算法需要更加复杂的标注,所以不像深度学习能直接从狗、卡车、大脑扫描图以及小铲子等图片的原始像素上去做单样本学习,这种图片也不是由笔画构成的。 Lake等人也指出,人类可以在omniglot数据集20类样本上达到95.5%的精度,仅仅比HBPL高一点。在钻牛角尖思想的引导下,我亲自试验了一下20类任务,达到了97.2%的精度。我并不是做的真正的单样本学习,因为很多符号我本来就认识,因为我熟悉希腊字母、平假名和片假名,我把这些我本来就认识的移除,我还是得到了96.7%的精度。我认为是我从自己吓人的字迹中练就了超人般的字符识别能力。

使用深度神经网络来做单样本学习?!

如果我们单纯的训练一个用交叉熵损失的softmax分类器神经网络来做单样本学习,很明显,网络会严重过拟合。即便是每类给出上百个样本,现代的神经网络依然会过拟合。深度网络有百万级别的参数来拟合训练数据,所以它们可以学习到一个巨大的函数空间(正式来说,是因为它们有一个很高的VC维,这就是为什么它们为什么可以很好的从复杂的高维数据中学习的部分原因)。很不幸的是,神经网络这个优势又成为了它们做单样本学习的一大障碍。当有百万级的参数需要做梯度下降,有这么多可能学习到的映射关系,我们怎么能设计一个网络,让他可以从单个样本去学习呢?

人类很容易从单个样本就能学会小铲刀或者字母\ThetaΘ的意思,因为我们一辈子一直都在从相似对象中观察和学习。把一个随机初始化的神经网络与人类这种花了一辈子时间去识别物体和符号相比,的确不太公平,因为随机初始化的神经网络对数据的映射结构缺乏先验。这也是为什么我看到的单样本学习论文都是采用的从其他任务上的知识迁移方法。

神经网络非常擅长从结构化的复杂/高维数据中(例如图像)提取特征。如果给神经网络与单样本学习任务相似的训练数据,它或许能够从这些数据中学习到有用的特征,这些特征可能不需要调整就能用到单样本学习。这样,我们仍旧能叫他单样本学习,因为辅助的训练数据与单样本测试的数据不是相同的类别。

(注意:这里的特征指的是“被用来训练的数据的映射数据“(译者注:例如经过CNN提取到的特征))

接下来以一个有趣的问题就是我们如何设计一个神经网络让他来学习特征?最显而易见的方法就是用迁移学习(如果有标记数据的话)来做这件事--在训练数据上训练一个softmax分类器,然后在单样本学习任务的数据集上微调最后一层的权重。实际上,神经网络分类器在omniglot数据集上不会有什么良好的表现,因为每类的样本仅有几个,即使是微调最后一层的权重,网络也会在训练集上过拟合。但这种方法也比使用L2距离的k近邻方法要好很多了(参考Matching Networks for One shot learning 中对各种单样本学习方法的效果的比较)。

这里还是有一种方法来做单样本学习的!忘了1近邻方法?这个简单的,非参的单样本学习器计算测试集中的样本与训练集中每个样本的L2距离并选择最近的作为它的类别。这种方法是ok的,但是L2距离会陷入严重的维度灾难问题,所以它在成千维的数据上(像omniglot)上表现不太好。另外,如果你有两个接近相同的图片,如果你把其中一张图片的像素向右移动一点,那么两张图片的L2距离会从0一下子变得非常高。L2距离在这种任务上是一个非常糟糕的度量。深度学习能奏效吗?我们可以使用深度卷积神经网络来学习一种非参的近邻分类器可以使用的相似性函数。

oneshot单样本学习笔记相关推荐

  1. 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述

    <繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...

  2. 单样本学习与孪生网络

    @miracle 在 单样本学习(One shot learning)和孪生网络(Siamese Network) 中说: 孪生网络与伪孪生网络 Siamese network就是"连体的神 ...

  3. 下载量过百万的吴恩达机器学习和深度学习笔记更新了!(附PDF下载)

    今天,我把吴恩达机器学习和深度学习课程笔记都更新了,并提供下载,这两本笔记非常适合机器学习和深度学习入门.(作者:黄海广) 0.导语 我和同学将吴恩达老师机器学习和深度学习课程笔记做成了打印版,放在g ...

  4. 33万字!深度学习笔记在线版发布!

    吴恩达老师的深度学习课程(deeplearning.ai),可以说是深度学习入门的最热门课程,我和志愿者编写了这门课的笔记,并在 github 开源,为满足手机阅读的需要,我将笔记做成了在线版,可以在 ...

  5. 智慧交通day04-特定目标车辆追踪02:Siamese网络+单样本学习

    1.Siamese网络 Siamese network就是"连体的神经网络",神经网络的"连体"是通过共享权值来实现的,如下图所示.共享权值意味着两边的网络权重 ...

  6. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  7. 深度学习笔记(42) 人脸识别

    深度学习笔记(42) 人脸识别 1. 人脸识别 2. One-Shot学习 3. Similarity函数 1. 人脸识别 现在可以看到很多产品在运用人脸识别,如手机解锁.车站身份识别认证.刷脸支付等 ...

  8. Android动画学习笔记

    Android实战经验之图像处理及特效处理的集锦 https://www.oschina.net/question/231733_44154 Android动画学习笔记 3.0以前,android支持 ...

  9. 《神经网络与深度学习》—学习笔记

    [nndl.github.io] [神经网络与深度学习] [nndl-book] 深度学习基础 深度学习是机器学习的一个分支,是指一类问题以及解决这类问题的方法. 深度学习问题是一个机器学习问题,指从 ...

最新文章

  1. 【mysql】关于事务的隔离级别
  2. 我眼中的Linux设备树(一 概述)
  3. mysql -- MAC下安装配置mysql
  4. ifconfig命令为centos linux系统配置临时的局域名IP、网关以及子网掩码
  5. 使用 Docker 搭建 Java Web 运行环境
  6. ai人工智能_我的人工智能周:第5部分
  7. quartz之@Scheduled定时器的使用和详细介绍
  8. 在线工具大全 - 推荐
  9. ​相亲APP开发软件为广大单身男女牵线搭桥​
  10. antd的联级选择器异步调用编辑回显_react-uplod-img 是一个基于 React antd组件的图片上传组件...
  11. 从零开始构建企业级推荐系统
  12. 区块链学习6:图灵完备和图灵不完备
  13. 数据可视化 六种基本图标
  14. php微信群,PHP微信群加群强制分享转发裂变源码
  15. Allein rennen spielen singen beißen.Espoir parfaitement arbre.
  16. 【Assassin's Creed】v刺客信条 中文版V3.1.7 gameloft经典动作游戏
  17. 用友U8普及版(U852)凭证套打设置
  18. 记:解决ADB Interface 找不到驱动程序方法
  19. java程序设计基础_陈国君版第五版_第九章例题
  20. 华为v5服务器设置虚拟,华为v5服务器配置网关

热门文章

  1. golang 编译运行出错:imported and not used: log
  2. windbg学习-------.expr和masm表达式
  3. 编程之美3.3 计算两个字符串的相似度
  4. java安装好了打不开机_这都不犯规?王骁辉尺度把握得真好 难怪0+0+0能打20分钟...
  5. python elementtree 父节点_python-访问ElementTree节点父节点
  6. c# point偏移_.NET 在图片上写文字出现偏移的解决
  7. 解决Ubuntu中sublime无法输入中文的问题
  8. php socket ubuntu,Ubuntu升级php7.0配置fpm socket
  9. zemax图像模拟_zemax2014免费版
  10. object转成实体对象_Object.assign 原理及其实现