小样本学习--(1)概论

目录

一、概述

二、小样本学习的数据集

1、Omniglot

2、MiniimageNet

三、孪生网络

四、三元组损失函数


一、概述

        小样本学习用于处理训练数据集中样本数量少的情况,一般来说,小样本学习流程是这样的,从一个多种类少量样本的巨大数据集中训练一个Pretrained网络模型(这一步不需要做),之后可以基于预训练模型根据微调、元学习或度量方法进行fine-tune,做到对查询集的一个分类和识别。

小样本学习的LibFewShot库:https://github.com/RL-VIG/LibFewShot

        小样本学习与传统神经网络的区别:

        假设训练猫狗分类问题,传统神经网络会从大量带标签的猫狗训练集中进行充分训练,得到较好的模型,然后测试集也是猫狗数据集,只不过是训练集中没有的图片,模型将对测试集进行分类。

        小样本学习首先在一个较大的较多类别,每个类别较少数据的数据集(即辅助集,不包含猫狗类别)中进行预训练,通过迁移学习对预训练模型进行微调,微调时会利用一个Support set(支持集),支持集包含猫狗的图片和标签,根据支持集的类别共K类和每个类别的图片数量n张,又叫做K-way n-shot小样本问题,通常K取5或10,n取1或5。通过在支持集进行微调,达到少量样本完成对查询集(测试集,猫狗测试集)的分类。

        小样本学习,不需要传统神经网络的过高层数,过多的融合来寻找分类的特征从而知道如何分类,而是通过有限的支持集进行相似度匹配,来达到分类的效果。

        小样本学习例子:

        下图的Query:兔子就是测试集,而辅助集在训练时没有见过兔子类,那么他是如何分类的呢?

        通过依赖支持集Support Set对于预训练模型进行微调,来获得水獭与测试图片相似度最高的标签。

        另外 K-way n-shot的举例如下:

         K-way n-shot与测试集的Accuracy的关系:

(1)支持集类别数越多,测试集Accuracy越低,因为测试图片占测试种类的比例下降了。

(2)支持集图片越多,测试集Accuracy越高,这个很好理解,图片越多学的越好。

二、小样本学习的数据集

1、Omniglot

        Omniglot是全语言文字数据集,包含50种语言的字母表,共计1623个类,每个字母由20个不同的人书写,也就是每个字母仅有20张图片,每个图片的像素为105*105。Omniglot数据集分为训练集和测试集,训练集有30个字母表,964个字符,测试集有20个字母表,659个字符,训练集和测试集类别不同,也就是说预训练也是进行的小样本学习,Omniglot数据集一般用作小样本训练。

2、MiniimageNet

        MiniimageNet是一个从ImageNet数据集中抽取的数据集,一共100个类别,每个类别600张图片,共计6万张图片。MiniimageNet数据集的训练集64个类别,验证集16个类别,测试集20个类别。Miniimagenet用于针对各种生物、物品的小样本学习数据集。

三、孪生网络

        孪生网络,利用相同样本和不同样本之间的区别,训练出一个能够分类的神经网络。

        首先将训练集分成正负样本,且样本数量相等的三元组形式,类别相同的图片为正样本,类别不同的图片(首先选取一张图片a,再找从不属于a的图片中随机取样b图片)为负样本。

        孪生网络前向传播输入两张图片,经过映射得到两个列向量,向量作差得到z层,经过全连接网络和激活函数,与所给target计算损失函数,并进行反向传播修改权重。

        注意这个网络只是简单的一个解释,内部的网络已经更新换代,但大体依旧是输入两张图片与一个Target训练该模型。如下图这种就是图片映射的列向量进入网络层,而没有直接做差。

        测试模型时,根据测试集与支持集的不同类别计算相似度,相似度最大的记为本次测试的类别。

四、三元组损失函数

        三元组损失(Triplet Loss),是基于度量的小样本学习中的损失函数方法。首先从训练集中随机选择一张图片作为anchor,如下图中第一张老虎图片,再根据anchor的类别寻找该类的随机一张图片作为Positive,最后从trainset除去老虎类,随机抽取一张图片记为Negative。

        根据三张图片,正样本和负样本去计算与anchor的2-范数,也就是几何距离,记作d+和d-,d+越小越好,正样本越接近anchor,d-越大越好,负样本越远离anchor。

        如果d+=d-那么相当于随机模型,所以训练好的模型必须满足d^-\geqslant d^++\alpha,我们定义三元组损失为   Loss(x^a,x^+,x^-)=max{0,d^++\alpha-d^-}

        根据三元组损失计算预测图片与支持集中图片的距离dist,通过比较距离中最短的一个,就可以确定预测图片所属的类别。 

相关视频:Siamese Network (孪生网络) (2/3)_哔哩哔哩_bilibili

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

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

相关文章

微信小程序开发之会议oa(首页搭建)

前言: 上一篇我们掌握了关于小程序的框架,这篇博客带你完成小程序版的会议OA首页。效果如下: 一, 1.1先创建OA首页页面: 首先我们先建一个新项目,在app.json中编写代码 {"pages": ["pages/…

Tang Capital宣布收购纳斯达克上市公司Rain Oncology100%股权

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,纳斯达克上市公司Rain Oncology(Rain)宣布近期已收到Tang Capital Partners旗下的子公司Concentra Biosciences以每股1.25美元的现金收购要约。 这家临床阶段微型市值癌症治疗药物开发商的股价在消…

初识Java 14-1 测试

目录 测试 单元测试 JUnit 测试覆盖率 前置条件 断言 Java提供的断言语法 Guava提供的更方便的断言 契约式设计中的断言 DbC 单元测试 Guava中的前置条件 本笔记参考自: 《On Java 中文版》 测试 ||| 如果没有经过测试,代码就不可能正常工作…

C++数据结构X篇_16_二叉树的拷贝和释放(采用递归的方法)

在上篇的基础上&#xff0c;本篇介绍如何进行二叉树的拷贝和释放。从代码中可以看到采用递归方式进行的拷贝、释放操作&#xff0c;基本套路都是一样的。 文章目录 1. 二叉树的拷贝2. 二叉树的释放 1. 二叉树的拷贝 #include <iostream> using namespace std;//定义二叉…

RTOS(4)自己的第一个FreeRTOS程序

创建两个任务 什么是任务呢&#xff1f; 对于整个单片机程序&#xff0c;我们称之为application&#xff0c;应用程序。 使用FreeRTOS时&#xff0c;我们可以在application中创建多个任务(task)&#xff0c;有些文档把任务也称为线程 (thread)。 void Task1Function(void *p…

Druid连接池最小连接数设置失效问题

问题发现&#xff1a; 配置 当项目启动后 线程池确实是初始化了5条连接&#xff0c;但是当项目运行一段时间后&#xff0c;5条连接确消失了&#xff0c;只会程序用到得时候&#xff0c;再去初始化连接&#xff0c;这样有点违背了参数设置得意义&#xff0c;后来通过查阅资料发…

如何通过Photoshop将视频转换成GIF图片

一、应用场景 1、将视频转有趣动图发朋友圈 2、写CSDN无法上传视频&#xff0c;而可以用GIF动图替代 3、其他 二、实现步骤 1、打开Photoshop APP 2、点击文件——导入——视频帧到图层 3、选择视频文件 4、配置视频信息&#xff0c;按照图片提示配置完毕之后点击确定&…

C++对象模型(13)-- 构造函数语义学:析构函数

1、默认析构函数生成规则 跟构造函数一样&#xff0c;编译器不一定会为类生成默认析构函数。生成默认析构函数的规则有下面2条&#xff1a; &#xff08;1&#xff09;包含一个类类型的成员变量&#xff0c;且成员变量所属的类有默认析构函数。 &#xff08;2&#xff09;其…

14. Java多线程基础

Java —— 多线程 1. 线程与进程1.1 线程生命周期1.2 线程优先级 2. 多线程2.1 守护线程2.2 多线程高并发2.3 synchronized同步锁2.4 synchronized互斥锁 1. 线程与进程 进程&#xff08;Process&#xff09; 操作系统进行资源分配和调度的基本单位&#xff1a;系统中正在运行的…

【网络协议】聊聊从物理层到MAC层 ARP 交换机

物理层 物理层其实就是电脑、交换器、路由器、光纤等。组成一个局域网的方式可以使用集线器。可以将多台电脑连接起来&#xff0c;然后进行将数据转发给别的端口。 数据链路层 Hub其实就是广播模式&#xff0c;如果A电脑发出一个包&#xff0c;B、C电脑也可以收到。那么数据…

[uni-app] canvas绘制圆环进度条

文章目录 需求参考链接基本问题的处理1:画布旋转的问题2:注意arc()的起始位置是3点钟方向3: 如果绘制1.9*Matn.PI的圆环, 要保证其实位置在0点方向?4:小线段怎么画, 角度怎么处理? 源码 需求 要绘制一个如此的进度条 参考链接 uni-app使用canvas绘制时间刻度以及不显示问…

4.Vue-Vue调用第三方接口

题记 用vue调用第三方接口&#xff0c;以下是全部代码和操作流程。 寻找第三方接口网站 推荐&#xff1a;免费API - 提供免费接口调用平台 (aa1.cn) 下面的代码以下图中的接口为例 安装axios模块 在终端输入以下命令&#xff1a; npm install axios 调用第三方接口代码 调…