小样本学习--(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-那么相当于随机模型,所以训练好的模型必须满足,我们定义三元组损失为

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

相关视频:Siamese Network (孪生网络) (2/3)_哔哩哔哩_bilibili
相关文章:
小样本学习--(1)概论
目录 一、概述 二、小样本学习的数据集 1、Omniglot 2、MiniimageNet 三、孪生网络 四、三元组损失函数 一、概述 小样本学习用于处理训练数据集中样本数量少的情况,一般来说,小样本学习流程是这样的,从一个多种类少量样本的巨大数据集…...
数据结构之手撕顺序表(讲解➕源代码)
0.引言 在本章之后,就要求大家对于指针、结构体、动态开辟等相关的知识要熟练的掌握,如果有小伙伴对上面相关的知识还不是很清晰,要先弄明白再过来接着学习哦! 那进入正题,在讲解顺序表之前,我们先来介绍…...
小微企业是怎样从客户管理系统中获益的?
大企业普遍拥有成熟的客户管理系统,而对小微企业而言,客户管理系统的重要性更为突出。这是因为小微企业管理相对薄弱,资源有限,人力资金需要更加精细化的管理。那么,小微企业如何从客户管理系统中获益? 一…...
mysql整库备份表结构和数据
命令 mysqldump -P 端口 -h 主机 -u 用户名 -p 数据库 > xxxxbak.sql 将导出数据库的表结构及数据(建表语句和insert语句) 举例 mysqldump -P 3306 -h 100.120.56.23 -u my_username-p sys > system-230510.sql...
LinkedHashMap与LRU缓存
序、慢慢来才是最快的方法。 背景 LinkedHashMap 是继承于 HashMap 实现的哈希链表,它同时具备双向链表和散列表的特点。事实上,LinkedHashMap 继承了 HashMap 的主要功能,并通过 HashMap 预留的 Hook 点维护双向链表的逻辑。 1.缓存淘汰算法…...
2023大联盟6比赛总结
比赛链接 反思 A 为什么打表就我看不出规律!!! 定式思维太严重了T_T B 纯智障分块题,不知道为什么 B 100 B100 B100 比理论最优 B 300 B300 B300 更优(快了 3 倍),看来分块还是要学习一…...
05_51单片机led流水线的实现
1:step创建一个新的项目并将程序烧录进入51单片机 以下是51单片机流水线代码的具体实现 #include <REGX52.H>void Delay500ms() //11.0592MHz {unsigned char i, j, k;i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i); }void main(){while(1){P1 0…...
Java系列 | 如何讲自己的JAR包上传至阿里云maven私有仓库【云效制品仓库】
什么是云效 云效是云原生时代一站式 BizDevOps 平台,产研数字化同行者,支持公共云、专有云和混合云多种部署形态,通过云原生新技术和研发新模式,助力创新创业和数字化转型企业快速实现产研数字化,打造“双敏”组织&…...
小程序技术加速信创操作系统国产化替换
随着信息技术的不断发展,信息技术应用创新(简称“信创”)已经成为了当今企业数字化转型的重要趋势之一。信创是指在信息技术领域,以自主可控的国产软硬件产品和服务为核心,构建起一套完整的信息技术生态体系࿰…...
免费:实时 AI 编程助手 Amazon CodeWhisperer
点 ,一起程序员弯道超车之路 现已正式推出实时 AI 编程助手 Amazon CodeWhisperer,包括 CodeWhisperer 个人套餐,所有开发人员均可免费使用。最初于去年推出的预览版 CodeWhisperer 让开发人员能够保持专注、高效,帮助他们快速、安…...
面试准备-深入理解计算机系统-信息的表示与处理1
浮点运算是不可结合的(由于表示的精度有限)。比如(3.141e20)-1e20是0.0而3.14(1e20-1e20)是3.14。整数虽然只能编码一个较小的取值范围,但是是准确的;浮点数虽然能编码更大的范围,但是是近似的。 二进制转十六进制转换…...
搭建Atlas2.2.0 集成CDH6.3.2 生产环境+kerberos
首先确保环境的干净,如果之前有安装过清理掉相关残留 确保安装atlas的服务器有足够的内存(至少16G),有必要的hadoop角色 HDFS客户端 — 检索和更新Hadoop使用的用户组信息(UGI)中帐户成员资格的信息。对调…...
【运维笔记】swow源码编译安装
swow的github网址 https://github.com/swow/swow 从github中拉取源码 git pull https://github.com/swow/swow.git 编译安装 github中readme文件讲述了安装方法 这里整理了命令,进入拉取项目的目录后依次执行命令即可 #pwd 确保自己在swow目录中,如…...
【2023/10/16 下午10:32:39】
2023/10/16 下午10:32:39 BOOL Create(LPCTSTR strTitle, DWORD dwStyle, const RECT &rect, CWnd *pwndParent, DWORD dwPaletteSetStyle = PSS_PROPERTIES_MENU | PSS_AUTO_ROLLUP | PSS_CLOSE_BUTTON | PSS_SNAP); 2023/10/16 下午10:32:46 这是一个函数声明,看起来…...
qemu基础篇——VSCode 配置 GDB 调试
文章目录 VSCode 配置 GDB 调试安装 VSCode 插件调试文件创建调试配置配置脚本qemu 启动脚 启动调试报错情况一报错情况二报错情况三 调试界面运行 GDB 命令查看反汇编断点查看内核寄存器查看变量参考链接 VSCode 配置 GDB 调试 qemu-基础篇——arm 裸机调试环境搭建 上一节中…...
Spark常用算子
转换算子 value类型 算子名称作用Map映射a->bflatMap扁平化[[a,b],[c,d]] -> [a,b,c,d] ,二维变一维groupBy分组[1,2,3,4] ->[[1,3],[2,4] ],一维变二维filter过滤[1,2,3,4] -> [2,4] 符合条件进入,不符合去掉distinct去重[1,1…...
day35
今日内容概要 Socket抽象层(socket编程) 基于TCP协议的借助socket可以编程客户端和服务端的程序 链接循环 通信循环 基于UDP协议的套接字(socket)编程 粘包现象 如何解决粘包现象(重要的是解决的思路) struct模块的使用(打包、解包) 今日内容详细 Socket抽象层&#x…...
js原型链以及实现继承的手段
1.原型链 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。 简单回顾一下构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。…...
jdk8u201版本cpu.load过高问题的排查和解决
文章目录 1、背景2、现象3、排查定位4、原因总结5、解决 1、背景 jdk8u45版本存在安全漏洞,性能问题。需要升级到8u201 2、现象 升级到201版本后,出现cpu.load过高 3、排查定位 使用压测工具压测时,cpu.load过高问题必现,确认…...
【计算机网络笔记】数据交换之报文交换和分组交换
系列文章目录报文交换分组交换存储-转发报文交换 vs 分组交换总结 系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 报文交换 报文:源(应用)发送的信息整体。比如一个文件、一…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
