【Deep Learning 8】元学习

🌞欢迎来到AI+生物医学的世界 
🌈博客主页:卿云阁

💌欢迎关注🎉点赞👍收藏⭐️留言📝

🌟本文由卿云阁原创!

🌠本阶段属于练气阶段,希望各位仙友顺利完成突破

📆首发时间:🌹2024年3月22日🌹

✉️希望可以和大家一起完成进阶之路!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


目录

基本思想

引入

传统的监督学习VSFew-Shot Learning

Siamese Network

Learning Pairwise Similarity Scores

Triplet损失

Pretraining and Fine Tuning

数学知识

简单的例子


基本思想

引入

       下图有4张图片,左边两张是球鱼,右边两个是穿山甲,现在给了一张Query图片,这张图片是球鱼还是穿山甲呐?如果每一类只有一两个样本,计算机能否想我们一样正确的分类?对于这4个样本,我们不可能构建一个传统的神经网络。图中的Support set指的是一个很小的数据集,Few-Shot Learning针对的就是这种小样本分类问题。

Few-Shot Learning和传统的监督学习有所不同,它的目标不是让计算机识别训练集里的图片,并且泛化到测试集,而是让计算机自己学会学习,我拿一个很大是数据集来训练神经网络,学习的目的不是让计算机知道什么是大象什么是老虎,不是让计算机识别没见过的大象和老虎,学习的目的是让计算机理解事物的异同,学会区分不同的事物,给两张图片,让计算机知道两个图片是相同的东西还是不同的东西。

我们的数据集里有很多的动物,一共有5类但是没有松鼠这个类别,所以模型不会识别松鼠,模型看到这两张图片,不知道是否是松鼠,而是去判断异同

现在我们换一种问法,我们给一张Query图片图片,让计算机判断这是什么东西,计算机会和Support set中的图片依次进行对比。(Support set中的图片可能很小,每一类的下面可能只有一类或者几类图片)

Meta-Learning (元学习)其实就是Few-Shot Learning,小朋友虽然没有见过水獭,但是看过一些动物的图片,就可以判断出来了。

传统的监督学习VSFew-Shot Learning

Few-Shot Learning里面有两个常用的术语

一般来说,分类准确率会随着ways是增加而降低,shot的增加而增加。

如何解决Few-Shot Learning?

学一个函数来判断相似度sim()

第一,从很大的数据集上,学习相似度函数。Siamese Network就可以作为相似度函数。

公共数据集介绍


Siamese Network

Learning Pairwise Similarity Scores

第一种方法是每次取两个样本比较它们的相似度。

正样本,就是从同类中取图片,把标签设置成1。

负样本,随机抽取一张图片,比如这辆车,排除汽车这个类别,然后再做随机抽样。

搭建一个卷积神经网络用来提取特征,输入是一张图片(X),输出是一个向量(f(x))。

现在开始训练神经网络,z表示两个向量的区别,再用全连接层来处理这个z向量,最后变成一个标量,最后经过激活函数,最后得到的就是0-1的实数,这个实数就可以衡量两张图片的相似度。

损失函数就是真实值和预测值的差别。有了损失函数就可以反向更新参数,模型一共有两个部分,一部分是卷积神经网络用来提取特征,一部分是全连接层用来计算相似度,训练的过程就是更新这两部分的参数。

训练好之后就可以进行预测,这6个类别都不在训练集里。现在来了一个Query,我们知道它一定属于6个样本中的一个。

Triplet损失

我们需要这样准备数据,我们有这样一个数据集我们每次选3张图片进行训练。

首先从训练集中随机选一张图片,把他当成anchor,然后从老虎中随机抽取另一张图片,作为正样本,排除老虎类别再抽取一张图片作为负样本。

搭建一个卷积神经网络用来提取特征,分别计算锚点和正负样本的距离。

d+越小越好,d-越大越好

训练好之后就可以进行预测,找出距离最小的。


Pretraining and Fine Tuning

      基本想法是在数据上预训练模型,然后在小规模的support set上做Fine Tuning。虽然这类方法很简单,但是很准确。

数学知识

假设两个向量的长度都是1,二范数为1,把向量x和向量w的夹角记作g。

如果向量x和向量w的长度不是1,归一化,把长度变成1,然后再求内积。

Softmax Function
假设它的输入是任意的k维向量,对每一个元素做归一化,得到k个大于0的数,然后对结果做归一化,让相加的结果为1。p就是 Softmax的输出。
Softmax Classifier是一个全连接层,加上一个Softmax函数,分类器的输入是x。
预训练一个神经网络用来提取特征,做预测的时候需要用到这个模型,我们把Query和support set中的图片都映射成特征向量,这样我们就可以比较Query和support set在特征你空间上的相似度。搭建一个卷积神经网络用来提取特征。
提取特征向量
预测
Fine Tuning
Xj是图片,Yj是标签,预训练的神经网络记作f(x)(特征向量)放到分类器。
实际上W和b是可以学习的,support set中有一个甚至几十个有标注的样本,每个样本都对应一个损失函数,相加作为目标函数,用support set所有的图片和标签来学习这个分类器,对目标函数做minimazation。
好的初始化
防止过拟合

简单的例子

import torch
from torchmeta.datasets import Omniglot
from torchmeta.transforms import Categorical, ClassSplitter, Rotation
from torchmeta.utils.data import BatchMetaDataLoader
from torchmeta.modules import (MetaModule, MetaSequential, MetaConv2d, MetaBatchNorm2d, MetaLinear)# 加载 Omniglot 数据集
dataset = Omniglot("data",num_classes_per_task=5,meta_train=True,transform = Categorical(num_classes=5))# 定义元学习模型
class ConvolutionalNeuralNetwork(MetaModule):def __init__(self, in_channels, out_features):super(ConvolutionalNeuralNetwork, self).__init__()self.features = MetaSequential(MetaConv2d(in_channels, 64, kernel_size=3, padding=1),torch.nn.ReLU(),torch.nn.MaxPool2d(2),MetaConv2d(64, 64, kernel_size=3, padding=1),torch.nn.ReLU(),torch.nn.MaxPool2d(2),)self.classifier = MetaLinear(64*7*7, out_features)def forward(self, inputs, params=None):features = self.features(inputs, params=self.get_subdict(params, 'features'))features = features.view((features.size(0), -1))logits = self.classifier(features, params=self.get_subdict(params, 'classifier'))return logits# 构建元学习模型
model = ConvolutionalNeuralNetwork(1, dataset.num_classes)# 定义损失函数和优化器
loss_func = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)# 训练元学习模型
for epoch in range(num_epochs):for batch in dataloader:train_inputs, train_targets = batch["train"]test_inputs, test_targets = batch["test"]train_outputs = model(train_inputs)train_loss = loss_func(train_outputs, train_targets)model.zero_grad()train_loss.backward()optimizer.step()# 在测试集上进行元更新test_outputs = model(test_inputs)test_loss = loss_func(test_outputs, test_targets)model.adapt(test_loss)

      使用 PyTorch 和 Torchmeta 库来实现。我们将使用 Omniglot 数据集,该数据集是一个小型的手写字符数据集,用于图像分类任务。我们将使用 MAML(Model-Agnostic Meta-Learning)算法来训练元学习模型,该模型能够快速适应新的任务。

【1】https://www.youtube.com/watch?v=UkQ2FVpDxHg&list=PLvOO0btloRnuGl5OJM37a8c6auebn-rH2

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

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

相关文章

C#基于SMTP的邮件发送

准备工作 注册邮箱 首先我们需要注册一个作为发送邮件的邮箱,这一步可以直接进入网易邮箱官网进行注册, 注册地址:https://mail.163.com/ 这里我们可以选择【快速注册】和【普通注册】,如图1-1所示,这里我选择的普…

[OpenCV学习笔记]获取鼠标处图像的坐标和像素值

目录 1、介绍2、效果展示3、代码实现4、源码展示 1、介绍 实现获取鼠标点击处的图像的坐标和像素值&#xff0c;灰度图显示其灰度值&#xff0c;RGB图显示rgb的值。 OpenCV获取灰度值及彩色像素值的方法&#xff1a; //灰度图像&#xff1a; image.at<uchar>(j, i) //j…

python与excel第一节

python与excel第一节 由于excel在日常办公中大量使用&#xff0c;我们工作中常常会面对高频次或者大量数据的情况。使用python语言可以更加便捷的处理excel。 python与vba的比较 python语法更加简洁&#xff0c;相较于vba冗长复杂的语法&#xff0c;python更加容易学习。 p…

【蓝桥杯选拔赛真题73】python偶数平方 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

目录 python偶数平方 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python偶数平方 第十五届蓝桥杯青少年组python比赛选拔赛真题 一、题目要…

Angular入门问题小本本

1、console.log打印object对象显示[object object] 解决方案&#xff1a;使用JSON.stringify console.log(JSON.stringify($rootScope.MaintainDeviceInfo));2、 State ‘goDiskManagement’’ is already defined 解决方案&#xff1a;同一个项目中&#xff0c;不能定义相同…

性能测试-Jmeter中IF控制器使用

一、Jmeter控制器 分为两种类型&#xff1a; 控制测试计划执行过程中节点的逻辑执行顺序&#xff0c;如&#xff1a;循环控制器&#xff0c;if控制器等对测试计划中的脚本进行分组&#xff0c;方便Jmeter统计执行结果以及进行脚本的运行时控制等&#xff0c;如&#xff1a;吞…

BUU [MRCTF2020]套娃

BUU [MRCTF2020]套娃 开题&#xff0c;啥也没有。 查看网页源代码发现后端源代码&#xff1a; <?php //1st $query $_SERVER[QUERY_STRING];if( substr_count($query, _) ! 0 || substr_count($query, %5f) ! 0 ){die(Y0u are So cutE!); }if($_GET[b_u_p_t] ! 23333 &am…

防火墙在解决方案及典型项目中的应用

防火墙在解决方案及典型项目中的应用 防火墙作为基础安全防护产品&#xff0c;在各种解决方案、业务场景中配套应用&#xff0c;本节给出各类方案资料链接方便查阅。 防火墙在华为网络解决方案中的应用 解决方案 文档 主要应用 CloudFabric云数据中心网解决方案 资料专区…

《剑指 Offer》专项突破版 - 面试题 88 : 动态规划的基础知识(C++ 实现)

目录 前言 面试题 88 : 爬楼梯的最少成本 一、分析确定状态转移方程 二、递归代码 三、使用缓存的递归代码 四、空间复杂度为 O(n) 的迭代代码 五、空间复杂度为 O(1) 的迭代代码 前言 动态规划是目前算法面试中的热门话题&#xff0c;应聘者经常在各大公司的面试中遇到…

Linux docker3--数据卷-nginx配置示例

一、因为docker部署服务都是以最小的代价部署&#xff0c;所以通常在容器内部很多依赖和命令无法执行。进入容器修改配置的操作也比较麻烦。本例介绍的数据卷作用就是将容器内的配置和宿主机文件打通&#xff0c;之后修改宿主机的配置文件就相当于修改了docker进程的配置文件&a…

webgl浏览器渲染设置

在浏览器中程序图形化webgl渲染时&#xff0c;有时候发现代码没有问题&#xff0c;但是就是无法渲染或者渲染报错&#xff0c;此时可以尝试如下的设置&#xff1a; 通过在chrome浏览器输入chrome&#xff1a;//flags打开扩展 设置一&#xff08;webgl开发者扩展&#xff09; 设…

复习Day2

AcWing 1214. 波动数列 - AcWing j(n-1)*b与前i-1项的和模n余数相同&#xff1a; 记前i项的和为x,则有 x%nj ,第i项为 -(n-1)b , 前i项的和为 x-(-(n-1)b)即 x(n-1)b , 而 x(n-1)b % n j (n-1)b % n 就是 x(n-1)b 在模n的情况下同余于 x%n (n-1)*b 对于加法,减法,乘法 什么…

2024华为OD统一考试(C卷)最新题库(Java Python C++)

关于华为OD ​ 华为的员工补充途径有三种&#xff0c;分别是校招、OD转正和社招。校招是华为唯一的正式员工入职途径&#xff0c;但是从近几届开始竞争非常激烈&#xff0c;尤其是在CV、AI、NLP等赛道上&#xff0c;所以对于C9等专业的学生来说&#xff0c;可以考虑转向一些冷…

Linux镜像文件下载地址--SCAS 开源镜像站,速度快

SCAS 开源镜像站 https://mirror.iscas.ac.cn/举例&#xff1a; 下载centos7 Index of /centos/7/isos/x86_64/ (iscas.ac.cn)

ARM实验 LED流水灯

.text .global _start _start: 使能GPIOE GPIOF的外设时钟 RCC_MP_AHB4ENSETR的第[4][5]设置为1即可使能GPIOE GPIOF时钟 LDR R0,0X50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来&#xff0c;保存到R1中 ORR R1,R1,#(0x3<<4) 将第4位设置为1 S…

Linux网络协议栈从应用层到内核层②

文章目录 1、bind 源码剖析2、listen 源码剖析3、accept 源码剖析4、connect 源码剖析客户端调用connect成功&#xff0c;但三次握手并未完成&#xff0c;进程是如何阻塞自己客户端在connect时&#xff0c;如何选择源端口客户发送syn封包以及重传服务端收到syn封包&#xff0c;…

算法公式汇总

文章目录 三角函数定义式诱导公式平方关系两角和与差的三角函数积化和差公式和差化积公式倍角公式半角公式万能公式其他公式反三角函数恒等式 三角函数定义式 三角函数 定义式 余切&#xff1a; c o t A 1 t a n A \text { 余切&#xff1a;} \ cotA \frac{1}{tanA} 余切&a…

x-zse-96安卓端纯算,魔改AES还原

两天前发了一个x-zse-96的文章,当时遇到了点问题,只分析到了最后一个白盒AES函数里面,并且当时用dfa攻击还原出了秘钥,IV也确定了,但是加密结果不对,本来打算把下文鸽掉的,因为当时unidbg没跑起来,用frida去hook白盒AES中的每一行汇编有点麻烦,没有unidbg方便.后来小白大佬说un…

内网渗透(一)必须了解Windows工作组

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、内网渗透测试简介 内网也叫局域网&#xff0c;是指在…

《自动机理论、语言和计算导论》阅读笔记:p1-p4

《自动机理论、语言和计算导论》学习第1天&#xff0c;p1-p4&#xff0c;总计4页。这只是个人的学习记录&#xff0c;因为很多东西不懂&#xff0c;难免存在理解错误的地方。 一、技术总结 1.有限自动机(finite automata)示例 1.software for checking digital circuits。 …