元学习之孪生网络Siamese Network
简介:元学习是一种思想,一般以神经网络作为特征嵌入的工具,实现对数据特征的提取,然后通过构造某种指标以引导优化器对模型参数进行优化。而最小化距离是最常见的学习目标,这就是熟知的度量学习,度量学习里面经典的训练范式就是孪生网络。
1、小样本学习
小样本学习是指用于训练的数据很少,以分类任务为例,minist数据一共有10个类别,每个类别差不多有几百张图片,传统的训练方式是一股脑的把所有训练集数据给端到端模型进行训练,得到一个模型,然后在测试集上测试。
在小样本学习当中,每个类别仅能够使用很少的图片,比如10个类别每个类别使用5张图片,则称为10ways-5shots,10个类别每个类别使用2张图片,则称为10ways-2shots。在这么少的数据情况下,一般的端到端模型肯定学不到东西,导致效果变差。
那么换个思路,让神经网络生成表征即可,但是得按照我的思路进行生成,思路就是你神经网络生成的样本表征需要满足下面的条件:相同的图片表征距离尽量靠近、不相同的图片表征距离尽量原理,然后构造一个自定义损失函数,进行训练即可。
可以看到,度量学习本质上就是在神经网络后面添加一个额外的网络层,这个网络层对神经网络的输出表征进行处理,输出一个度量值,也就是自定义了一个损失函数网络层。在torch当中,原理层面就说构造了一个新的计算图,使得优化器的优化目标进行了改变,而这种改变也会使得神经网络的权重变成我们想要的情况,也就是这个自定义的度量损失函数指导了神经网络权重的学习,这就是元学习的体现。
换一种说法就是,有一个初始的神经网络,我们需要改变他的权重,但不能直接让这个神经网络去参与训练。我们需要对神经网络的输出进行加工,得到另一种令人接受结果,然后使用万能的优化器优化这个结果,当这个结果确实令人接受了,那么神经网络的权重自然而然也就令人接受了。
2、孪生网络数据集
下面是孪生网络的数据集格式。
from torchvision import transforms
from torch.utils.data import Dataset, DataLoader
from PIL import Image
import random
import torch.functional as F
from tqdm import tqdmclass SiameseDataset(Dataset):def __init__(self, image_paths, labels, transform=None):self.image_paths = image_pathsself.labels = labelsself.transform = transform or transforms.Compose([transforms.Resize((256, 256)), # 调整图片大小transforms.ToTensor(), # 转换为张量transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ])self.label_to_indices = self._create_label_to_indices()def _create_label_to_indices(self):"""创建一个字典,将每个标签映射到具有该标签的所有图像的索引列表"""label_to_indices = {}for idx, label in enumerate(self.labels):if label not in label_to_indices:label_to_indices[label] = []label_to_indices[label].append(idx)return label_to_indicesdef __len__(self):"""返回数据集的大小"""return len(self.image_paths)def __getitem__(self, index):"""返回一对图像和一个标签,指示这对图像是否属于同一类别"""# 随机选择是否返回同一类别的图像对label = self.labels[index]if random.random() < 0.5:# 选择同一类别的图像siamese_index = random.choice(self.label_to_indices[label])target = 1 # 1 表示同一类别else:# 选择不同类别的图像other_labels = [l for l in self.label_to_indices.keys() if l != label]other_label = random.choice(other_labels)siamese_index = random.choice(self.label_to_indices[other_label])target = 0 # 0 表示不同类别# 加载图像image1 = Image.open(self.image_paths[index]).convert('RGB')image2 = Image.open(self.image_paths[siamese_index]).convert('RGB')# 应用变换if self.transform:image1 = self.transform(image1)image2 = self.transform(image2)return image1, image2, target
3、损失函数
class ContrastiveLoss(nn.Module):def __init__(self, margin=2.0):super(ContrastiveLoss, self).__init__()self.margin = margindef forward(self, output1, output2, label):euclidean_distance = F.pairwise_distance(output1, output2)loss_contrastive = torch.mean((1-label) * torch.pow(euclidean_distance, 2) +(label) * torch.pow(torch.clamp(self.margin - euclidean_distance, min=0.0), 2))return loss_contrastive
相关文章:
元学习之孪生网络Siamese Network
简介:元学习是一种思想,一般以神经网络作为特征嵌入的工具,实现对数据特征的提取,然后通过构造某种指标以引导优化器对模型参数进行优化。而最小化距离是最常见的学习目标,这就是熟知的度量学习,度量学习里…...
Python----PyQt开发(PyQt高级:组件大小,界面位置,按钮,文本显示,文本输入,字体大小)
一、大小 setMinimumSize(width, height) 描述: 设置控件的最小尺寸。控件不会被缩小到比这个尺寸更小的大小。 参数: width: 最小宽度(以像素为单位)。 height: 最小高度(以像素为单位)。 button.setMinimumSize(100, …...
qt + opengl 给立方体增加阴影
在前几篇文章里面学会了通过opengl实现一个立方体,那么这篇我们来学习光照。 风氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了这些光照分量看起来的样子: 1 环境光照(Ambient …...
vue2老版本 npm install 安装失败_安装卡主
vue2老版本 npm install 安装失败_安装卡主 特别说明:vue2老版本安装慢、运行慢,建议升级vue3element plus vite 解决方案1: 第一步、修改npm 镜像为国内镜像 使用淘宝镜像: npm config set registry https://registry.npmmir…...
20250213编译飞凌的OK3588-C_Linux5.10.209+Qt5.15.10_用户资料_R1
20250213编译飞凌的OK3588-C_Linux5.10.209Qt5.15.10_用户资料_R1 2025/2/13 11:43 缘起:飞凌发布了高版本内核的适配OK3588-C的Buildroot的SDK:OK3588-C_Linux5.10.209Qt5.15.10_用户资料_R1。 但是编译异常了。 于是按照百度升级libc6,可以…...
中望CAD c#二次开发 ——VS环境配置
新建类库项目:下一步 下一步 下一步: 或直接: 改为: <Project Sdk"Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>NET48</TargetFramework> <LangVersion>pr…...
【Elasticsearch】词干提取(Stemming)
词干提取是将一个词还原为其词根形式的过程。这确保了在搜索过程中,一个词的不同变体能够匹配到彼此。 例如,walking(行走)和walked(走过)可以被还原到同一个词根walk(走)。一旦被还…...
Rander压力测试监测,更改服务端资源node
测试策略 压力测试, 目前是本地VM的资源不够,导致压力瓶颈,目前本地的VM,CPU是6个,可以增加到8个,服务端目前资源利用率没有达到最高点 we are now using 3 nodes with 3 pods, therefore, we need the …...
Go语言实现十大排序算法超细节图片讲解
基础排序 冒泡排序 将序列中的元素进行两两比较,将大的元素移动到序列的末尾。 平均时间复杂度是O(n^2),最坏时间复杂度是O(n^2),最好时间复杂度是O(n),排序结果具有稳定性,空间复杂度是O(1)。 这里所说的稳定性是针对…...
linux-centos等测试环境做压力测试
一, jmeter环境安装 1, jdk下载安装 因为jmeter使用Java写的测试工具,应用需要jdk环境支持. yum -y install java-1.8.0-openjdk* 注意:【jdk和*通配符之间不能敲空格,有空格不能匹配所有的子文件】【安装过程中需要等待它执行完成,不要中…...
Django中实现可靠的定时任务调度系统
在许多Web应用程序中,定时任务是一个常见的需求。无论是数据同步、报告生成还是定期维护,都需要一个可靠的调度系统。本文将介绍如何在Django项目中实现一个强大的定时任务调度系统,该系统不仅能够按时执行任务,还能处理分布式环境中的并发问题。 1. 概述 我们将使用以下…...
【鸿蒙Next】写入沙箱的日志文件如何查看
demo案例:https://gitee.com/pengyoucongcode/TxtEdit 文章参考:https://blog.csdn.net/qq_42896653/article/details/144782468...
网页五子棋——通用模块
目录 项目创建 通用功能模块 错误码 自定义异常类 CommonResult jackson 加密工具 项目创建 使用 idea 创建 SpringBoot 项目,并引入相关依赖: 配置 MyBatis: 编辑 application.yml: spring:datasource: # 数据库连接配…...
第6章 6.2使用ASP.NET Core 开发WebAPI ASP.NET Core Web API
6.2.1 Web API项目的搭建 进入VS,【创建新项目】,选择【ASP.NET Core Web API】模板,【下一步】,编辑项目名称及项目位置,【下一步】,选择框架,其他选项默认即可,【创建】。 进入项…...
[MFC] 使用控件
介绍如何使用控件,以及如何获取控件中的数值 check Box 添加点击事件,即选中和取消选中触发的事件 第一种方式是按照如下方式第二种方式是直接双击点击进去 void CMFCApplication1Dlg::OnBnClickedCheckSun() {// TODO: 在此添加控件通知处理程序代…...
景联文科技:以精准标注赋能AI未来,打造高质量数据基石
在人工智能蓬勃发展的时代,数据已成为驱动技术革新的核心燃料,而高质量的数据标注则是让AI模型从“感知”走向“认知”的关键桥梁。作为深耕数据服务领域的创新者,景联文科技始终以“精准、高效、安全”为核心理念,为全球AI企业提…...
2月14(信息差)
🌍杭州:全球数贸港核心区建设方案拟出台 争取国家支持杭州在网络游戏管理给予更多权限 🎄Kimi深夜炸场:满血版多模态o1级推理模型!OpenAI外全球首次!Jim Fan:同天两款国产o1绝对不是巧合&#x…...
UE_C++ —— Metadata Specifiers
声明UClasses、UFunctions、UProperties、UEnums和UInterfaces时使用的元数据关键词,表示其与引擎和关卡编辑器诸多方面的互动方式; 当声明classe、interfaces、structs、enums、enum values、functions、or propertie时,可添加 Metadata Spe…...
C++ 常用的设计模式
1:单例模式:首先能想到的,最为重要的一个设计模式。确保一个类仅有一个实例,提供一个 全局访问点,惯用做法是屏蔽构造数访问(设为private),通过static 权限达到间接访问调用的目的…...
web集群(LVS-DR)
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项 目,它的官方站点是 www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在 Linux2.4内核以前,使用LVS时必须要重新编…...
Instagram与小红书的自动化运营
Instagram与小红书的自动化运营 引言 在这个信息爆炸的时代,社交媒体成为了与世界互动的重要平台。在这样的背景下,如何高效地运营你的Instagram或小红书账户,成为众多内容创作者和品牌的重要课题。那么,自动化运营究竟是什么&a…...
从二维到三维3D工业相机如何改变机器视觉检测
从二维到三维,3D工业相机在机器视觉检测中带来了显著变革,主要体现在以下几个方面: 深度信息获取 二维相机:只能提供平面信息,无法获取物体的深度。 三维相机:通过深度信息,能够更精确地测量物…...
多媒体软件安全与授权新范例,用 CodeMeter 实现安全、高效的软件许可管理
背景概述 Reason Studios 成立于 1994 年,总部位于瑞典斯德哥尔摩,是全球领先的音乐制作软件开发商。凭借创新的软件产品和行业标准技术,如 ReWire 和 REX 文件格式,Reason Studios 为全球专业音乐人和业余爱好者提供了一系列高质…...
DeePseek结合PS!批量处理图片的方法教程
今天我们来聊聊如何利用deepseek和Photoshop(PS)实现图片的批量处理。 传统上,批量修改图片尺寸、分辨率等任务往往需要编写脚本或手动处理,而现在有了AI的辅助,我们可以轻松生成PS脚本,实现自动化处…...
2.14寒假作业
web:[SWPUCTF 2021 新生赛]PseudoProtocols 打开环境给了提示要我们找 hint.php url是给了后缀的,不单纯是地址,直接用为协议看一下目标文件,得到base64加密的文字 解密,提示我们访问一个文件 跟着思路走访问文件之后…...
【鱼眼镜头12】Scaramuzza的鱼眼相机模型实操,不依赖于具体的相机几何结构,直接从图像数据出发,因此更具灵活性。
文章目录 Scaramuzza相机模型标定效果2、原理和代码代码1、 2D映射到3D,函数输入为2D点坐标OCAM参数代码功能详解2、3D --> 2D 3、总结Scaramuzza 模型的核心思想Scaramuzza 模型的核心思想与 Kannala-Brandt 模型的对比Scaramuzza 模型的独特之处Scaramuzza 的意…...
(Windows | Linux)ssh访问服务器报错:no matching key exchange method found
问题现象 ssh user1192.168.1X.XX Unable to negotiate with 192.168.1X.XX port 22: no matching key exchange method found. Their offer: gss-group1-sha1-toWM5Slw5Ew8Mqkayal2g,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-…...
达梦分布式集群DPC_架构详解_yxy
达梦分布式集群DPC_架构详解 1 DPC核心架构介绍1.1 架构图1.2 DPC核心架构组件 2 多副本2.1 多副本架构图2.2 多副本示例2.3 RAFT组概念2.4 表空间与RAFT组的关系 1 DPC核心架构介绍 1.1 架构图 1.2 DPC核心架构组件 DMDPC 架构由三部分组成 SP(SQL Processor&…...
51单片机独立按键的扩展应用
提示: 按键S7和S6为选择键,确定控制键控制那组LED指示灯。按键S5和S4为控制键,按键该键点亮指定的LED指示灯,松开后熄灭。按下S7点亮L1指示灯,L1点亮后,S6不响应操作,S5控制L3,S4控…...
浅识MQ的 Kafka、ActiveMQ、RabbitMQ、RocketMQ区别
DeepSeek回复: 以下是主流消息队列(MQ)的对比分析,结合核心特性、适用场景和实际案例说明: 一、主流MQ对比分析 维度 Kafka RabbitMQ RocketMQ ActiveMQ所属公司Apache(LinkedIn开源)…...
