weka分类器怎么设置样本类别_【程序喵笔记】小样本学习1.0

小样本学习

前几天接触小样本学习 Few-Shot Learning,感觉很是有意思。看到Shusen Wang老师的讲解,感觉很棒~持续学习~

学会学习 Lean to learn

小朋友去动物园,见到未知的动物,他虽然不知道类别,但是给他看一些卡片,让他比比看哪个长得像,他们很快的判断出所见动物的类别,这就是人类的学习。

6b7ef593dbe2593903b62fc54dd7200e.png

如果机器也可以学习呢?给一张图片(Query),这张图训练集并没有出现啊,但是不要慌,有卡片(Support Set)来让模型做选择题,依次比较相似度。学会完成多选一的选择题就是元学习(Meta Learning)需要学到的模型,也就是让机器学会学习。

cd7edf71564f14ea83eeb02ddd14c830.png

比较:大样本与小样本学习

传统监督学习

训练集样本大,机器根据训练集中的图片,并泛化到测试集,给出图片,识别出具体的类别。

85d74c1af57559a21c138add8d9f04a2.png

小样本学习

小样本直接训练神经网络会产生过拟合。小样本学习是元学习(Meta Learning) 的一种,希望模型学会学习,并不是让模型区分训练集未出现的新样本,而是是让机器学会学习事物的异同,给定图片,判断是否为同一类别。

b5c845b97b8e3e94afd85db5335e2da0.png

小样本学习基础

基本概念

(1)k-way n-shot Support Set

k-way: support set 中类别数n-shot: 每一类的样本数
  • d2af120e9ac113c2b73e4f76e75d739d.png

很明显,way越大,选择变多,准确率会下降,shot越大,样本数增多,准确率会增加。

(2)余弦相似度

衡量两个向量之间的的相似度,两个向量分别为xw,他们的二范数(长度)为1,两向量的内积为余弦相似度,可以理解为xw上投影的长度

2199eb415ac3024ee85a3983a0351a82.png

如果两个向量长度不一致,需要将两向量归一化,取内积:

1937bc467e6546888dfaa9a3dbc69d88.png

(3)softmax

softmax函数是常见激活函数,将向量映射为概率分布,常作为网络最后一层,输出的每个概率值表示对每个类别的Confidence(置信度)。让大的值变大,小的值变小,也就平和一点的max。

7624af19ab4cd99780000c945a682970.png

softmax 分类器,输入为特征值(全连接层输出的),输出为k维(k是类别数)的概率,W和b维参数,反向传播会训练。

1d39c3394e3ced21c7f8b555a2b7bca3.png

数据集

(1)Omniglot

  • 手写数据集,50种不同语言的1632个类别,每个类别有20个样本,样本尺寸为105*105
  • 训练集:964类,19280个样本
  • 测试集:659类,13180个样本
  • 2af07d0a83c5046ac47131a269860b44.png

(2)Mini-ImageNet

  • Matching Networks for One Shot Learning(MAML)论文中提出,从ImageNet提取100类,每个类别600样本,样本尺寸为84*84
  • 训练集:64类,38400个样本
  • 验证集:16类,9600个样本
  • 测试集:20类,1200个样本

网上只有从ImagNet上的原图和CSV文件,我按照MAML的方法生成的数据集,并上传到网盘:

链接:https://pan.baidu.com/s/1nt2WTIXM-bx3s0s51_v_eg 提取码:obg7

2579160037e97cba475878c559d07cb6.png

基本思想

  1. 预训练:从大规模数据集中训练一个卷积神经网络f来提取图像特征。可以是分类网络去掉全连接层,也可以使用孪生网络(Siamese Network)。
  2. 小样本预测 :将query和support set 中每个样本映射到特征空间,得到特征,依次比较querysupport set中每个特征的相似度( Similarity),进行判定。但是更常用的方法是用support set训练一个分类器,再进行预测,称为Fine Tuning。

预训练:孪生网络

Siamese Network, Siamese意思是连体婴儿,也就是网络的头不一样,但是脚连在一起,Siamese Network为孪生网络/连体网络。该网络最主要目的:构建卷积神经网络来比较样本之间的异同,训练网络有两种方法:

成对相似度

Pairwise Similarity,数据集取两个样本

1.训练数据集

训练集来自很大样本数据集,训练数据分为正样本,同一类抽取两张不同图片,标签为1,两样本相同;负样本,不同类别抽取两张图片,标签为0,两样本不同。

aa1efcbd7fdeaa16761fb288c1de8762.png

2.孪生网络结构

(1)提取特征的CNN

输入是图片,输出是特征向量,有卷积池化层的卷积神经网络就是 f

0ff2e11b0c1647783067d36037632389.png

(2)整体网络结构

训练集样本(两张图片)输入到CNN,分别提取出特征向量,两个特征向量相减的绝对值为Z,用来比较两个特征区别,再用全连接层处理 Z得到一个值,最后用sigmoid将其转换到[0,1]区间,这就是样本的sim

eb3dd7a7932ae59166c71e727afd5bbd.png

3.训练网络

(1)前向传播

前向传播就是计算损失,有了样本的sim,结合正负样本标签Target,就可以计算损失。

002afd8be83acc8fca2f87f3b197f240.png

(2)反向传播

反向传播更新卷积神经网络f和全连接层 Dense Layer的参数

6944e3f7339693ba12984ae279f3faa5.png

4.直接预测

querysupport set都是训练集中没出现的类别。querysupport set每一张作为样本,输入网络,分别得到sim,最大的为 query的类别。

三重损失

Triplet Loss,数据集取三个样本

1.训练数据集

在大规模数据集中,某一类别取一个样本为 Anchor,同一类别再取一个样本为Positive,不同类别取一个样本为Negative,这样构成了一组数据。

af80561ecf2cc4dceba8a852864f297e.png

2.孪生网络结构

同样有一个卷积神经网络作为特征提取,Positive和Negative分别与Anchor的特征向量求差的二范数的平方,记作距离d

8818eac22bb6c1dcb31f552294e8bcab.png

3.训练网络

(1)前向传播

距离表现在特征空间上,希望同一类离得近,不同类离得远。

d36bb30d9dba940a9ae0057ba7b1a249.png

所以,引入一个超参数,使得负样本距离远大于正样本距离加一个超参数,这样损失定义为

6d7ce5c8eb240fe7a5ad70e7d44d5893.png

(2)反向传播

由于并没有加入全连接层,所以在反向传播时只需要更新卷积神经网络f的参数

4.直接预测

querysupport set都是训练集中没出现的类别。querysupport set每一张作为样本,输入网络得到向量特征,计算两样本的距离(差的二范数的平方),距离最小的为 query的类别。

分类器

希望用support set实现一个分类器,来预测query是哪一类别的概率。先看一下基本分类器(直接分类不训练)和使用Fine Tuning的分类器(需要用support set训练)

基本分类器

预训练生成的特征提取网络记为f,提取 support set每个样本特征,如果是few-shot 提取后每类取均值(这是最简单的方法),然后归一化为[0,1]区间。

48e9305221ea9de7e4b37f1fc57f6fb3.png

同理,提取query 的特征,将所有向量映射到特征空间

21b7c30ffa38d3cecf519f94172a1248.png

support set三个特征记做M,构建softmax分类器 p = softmax(W*x + b),赋值W=M, b=0xquery的特征q。这样就可以做预测,显示query属于每一类的概率 p,概率最大为所属的类别。

56e717951c1b1b8bcb1c3221a623822f.png

Fine Tuning

基本分类器中的W,b是固定的,如果使用support set训练W,b进行微调(Fine Tuning),当然也可以训练特征提取的CNN。

前向传播

训练数据是来自support set中的有标签的样本,样本为x,标签为y

计算每一个样本的损失:预测值和和真实标签求交叉熵。累加 support set所有样本的损失

424e32fa355bda38e76ebefa0a5fecf6.png

反向传播

反向传播更新softmax分类器中的Wb,也可以更新特征提取网络f

f3a607e4c8dd47c772e2429026604a07.png

细节

(1)初始化

按照基本分类器赋值W=M, b=0,作为softmax分类器的初始化

(2)正则化

增加正则化可以使训练效果更好,在损失计算后面增加正则化(Regularization)

使用熵正则化

很明显,如果各个类别概率很相近,那么他们的熵会很大,我们希望各个概率差距大,熵小一点。

204bf5ca3bb4eec5fb00e4a3e5cac615.png

(3)引入余弦相似度

分类器原先公式为

把内积替换成余弦相似度 :

相关推荐

【程序喵读论文】分类网络进阶版

【程序喵读论文】图像分类网络

【程序喵笔记】Jupyter 实用篇

7253fb49b9e47ee5c9a4094f3e9735d9.png

edde9299d88c105963991234479d845b.png  扫码关注毛毛喵  28b780199dbba50e24dbc37dc8fa008d.png

一只写程序的喵

科研&生活

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven 生成本地库_在2017年从Maven工件生成P2存储库

maven 生成本地库几年前,我写了一篇博客文章,介绍如何基于Maven工件生成P2存储库。 如今,这种描述的方法已经过时了,我想展示一种基于p2-maven-plugin的新方法,该方法是为解决此问题而创建的。 Maven构建生命周期中的…

java 状态模式 同步_JAVA设计模式之状态模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改…

python列表修改_python修改列表

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 由于惯性思维,导致使用for循环修改列表中的值出现问题首次尝试:def make_great(orig…

python装饰器作用和功能_Python装饰器原理与用法分析

这篇文章主要介绍了Python装饰器原理与用法,结合实例形式分析了Python装饰器的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下 本文实例讲述了Python装饰器原理与用法。分享给大家供大家参考,具体如下: 1、装饰器的本质是函数&#xff0c…

java登录界面命令_Java命令行界面(第16部分):JArgp

java登录界面命令这篇文章中介绍的基于Java的命令行参数处理库是IBM developerWorks文章Java编程动态性,第3部分,应用的反射 (第2003 部分,此归档文章于2016年“归档”,但仍可通过PDF下载 )的特色库。 。 该…

tnsnames.ora配置未生效_1分钟了解网络交换机的6种命令配置模式

我们在配置交换机的时候首先要了解的就是交换机命令模式,小编用Cisco思科交换机为例带大家了解交换机的6种配置模式。Cisco IOS提供了用户EXEC模式和特权EXEC模式两种基本的命令执行级别,同时还提供了全局配置、接口配置、Line配置和vlan数据库配置等多种…

java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

java 线程中创建线程在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet。 java.util.concurrent包甚至没有一个名为ConcurrentHashSet的类,但是从JDK 8开始,您可以使用新添加的keySet(默认值)和ne…

docker 删除所有镜像_关于 Docker 镜像的操作,看完这篇就够啦 !(下)| 文末福利...

紧接着上篇《关于 Docker 镜像的操作,看完这篇就够啦 !(上)》,奉上下篇 !!!镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌握的。本文将带您一步一…

python与access选哪个_从Python连接到Access

I want to be connected to a database Boreas (Access) from Python. How to be connected from Python to Access database Northwind? 解决方案 Here are 2 ways, with COM dispatch and with odbc. You will need the pywin32 extensions and/or pyodbc to use these meth…

设备唯一标识/设备码/设备标识码

文章目录一、MAC地址二、IMEI三、MEIDMEID 和 IMEI 用途的区别四、序列号(一)苹果手机序列号(二)华为手机序列号一、MAC地址 MAC地址(英语:Media Access Control Address),直译为媒…

java登录界面命令_Java命令行界面(第18部分):JCLAP

java登录界面命令Giles Winstanley的JCLAP ( Java命令行参数解析器 )是基于Java的命令行处理库的系列文章中介绍的第18个库。 这篇文章的示例基于JCLAP 1.4 ,它需要Java 8 。 JCLAP主页上指出:“ JCLAP帮助Java开发人员为其应用程…

java登录界面命令_Java命令行界面(第15部分):Jargo

java登录界面命令Jargo在其GitHub主页上定义为“一种减轻程序参数/选项处理的工具”。 当已经存在许多其他命令行处理库时,该页面为另一个命令行处理库提供了基本原理 ,该列表的顶部是“因为类型安全性,不变性和可读性很重要”。 Jargo的选项…

没学过编程能学python吗_我没学过编程,能否学会Python?

学习Python编程语言,是大家走入编程世界的最理想选择。那么我没学过编程,能否学会Python?上海Python培训肯定的回答您:of course!完全能学会!设计大师说过,留白是很好的风景,适当的留白是设计的至高境界;对于没有编程…

java登录界面命令_Java命令行界面(第13部分):JArgs

java登录界面命令JArgs 1.0的区别在于,这是我的第13篇文章的主题,该文章是关于Java命令行参数解析的。 JArgs是一个开放源代码( BSD许可 )库,主要由Steve Purcell和Ewan Mellor等 不同贡献者支持。 事实证明&#xff0…

java登录界面命令_Java命令行界面(第11部分):CmdLn

java登录界面命令这篇文章介绍了如何使用Ostermiller Java Utilities 1.08.02的CmdLn(Java命令行解析器)来处理基于Java的应用程序中的命令行参数。 Ostermiller Java实用程序包括几种不同类型的实用程序 ,但本文的重点是组件页面上描述的“命…

socket模拟http的登陆_Python网络爬虫之模拟登陆 !

为什么要模拟登陆?Python网络爬虫应用十分广泛,但是有些网页需要用户登陆后才能获取到信息,所以我们的爬虫需要模拟用户的登陆行为,在登陆以后保存登陆信息,以便浏览该页面下的其他页面。保存用户信息模拟登陆后有两种…

java登录界面命令_Java命令行界面(第12部分):CLAJR

java登录界面命令第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 (CLAJR)。 该“库”是单个Java源文件( CLAJR-0.9.java ), 可从SourceForge下载 。 CLAJR的主页当前显示2006年版…

openssh rpm包_100台CentOS7要升级OpenSSH怎么办?

背景现在有 100 台 Centos7 需要升级 OpenSSH 到 8.3,怎么办呢?一台台的操作显然不符合我摸鱼的风格,既然每台操作都一样,Ansible Roles 就有用武之地了。正常升级流程首先 rpmbuild 打出 OpenSSH 8.3 的 RPM 包,rpm -…

java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?

前面几篇文章主要分析了 Spring IoC 容器如何初始化,以及解析和注册我们定义的 bean 信息。其中,「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述,「Spring IoC 容器初始化」和「Spring IoC 容器初始化(2)」分析了 Spring 如何初始化…

thymeleaf与jsp_PagingAndSortingRepository –如何与Thymeleaf一起使用

thymeleaf与jsp在本教程中,我将演示如何通过分页显示Thymeleaf中的企业客户列表。 1 –项目结构 我们有一个正常的Maven项目结构。 2 –项目依赖性 除了正常的Spring依赖关系之外,我们还添加Thymeleaf和hsqldb,因为我们使用的是嵌入式数据…