元学习之孪生网络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
简介:元学习是一种思想,一般以神经网络作为特征嵌入的工具,实现对数据特征的提取,然后通过构造某种指标以引导优化器对模型参数进行优化。而最小化距离是最常见的学习目标,这就是熟知的度量学习,度量学习里…...
深入HBase——引入
引入 前面我们通过深入HDFS到深入MapReduce ,从设计和落地,去深入了解了大数据最底层的基石——存储与计算是如何实现的。 这个专栏则开始来看大数据的三驾马车中最后一个。 通过前面我们对于GFS和MapReduce论文实现的了解,我们知道GFS在数…...
Python创建FastApi项目模板
1. 项目结构规范 myproject/ ├── app/ │ ├── core/ # 核心配置 │ │ ├── config.py # 环境配置 │ │ └── security.py # 安全配置 │ ├── routers/ # 路由模块 │ │ └── users.py # 用户路由 │ ├…...
TCNE 网络安全
一.概况 CTF(Capture The Flag)在网络安全领域中指的是网络技术人员之间进行技术竞技的一种比赛形式,它起源于1996年的DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式,现已成为全球范围网…...
车规MCU处理器选择Cortex-M7还是Cortex-R52?
车规mcu处理器选择Cortex-M7还是Cortex-R52?跟随小编从具体应用场景、安全等级(ASIL)、性能、成本进行分析吧。 01安全等级需求 ASIL-D(如刹车、转向)→ 必选R52。R52原生支持ASIL-D,硬件级错误检测&#…...
什么是计算机中的 “终端”?
在我们初学编程的时候,会遇到一个很重要的概念 ——终端。那它到底是什么呢? 在计算机领域,终端就像是我们和计算机进行对话的 “窗口”。我们可以在这个窗口里,用一些特定的命令来告诉计算机该做什么。比如,让计算机…...
LeetCode刷题---字符串---819
最常见的单词 819. 最常见的单词 - 力扣(LeetCode) 题目: 给你一个字符串 paragraph 和一个表示禁用词的字符串数组 banned ,返回出现频率最高的非禁用词。题目数据 保证 至少存在一个非禁用词,且答案 唯一 。 par…...
SSH IBM AIX服务器相关指标解读
(一)ZPU使用率 含义 在IBM AIX服务器中,ZPU使用率反映了特定处理单元(ZPU,假设是某种自定义或特定环境下的处理单元)的资源利用程度。它表示ZPU在一段时间内处于忙碌状态执行任务的时间比例。例如ÿ…...
Wireshark TS | 再谈虚假的 TCP Spurious Retransmission
前言 在之前的《虚假的 TCP Spurious Retransmission》文章中曾提到一个错误判断为 TCP Spurious Retransmission,实际为 TCP Out-Of-Order 的案例,本次继续探讨一个虚假的 TCP Spurious Retransmission 案例。 问题背景 TCP Spurious Retransmission…...
基于kafka、celery的日志收集报警项目
项目环境:centOS7.9 mariadb5.6 celery5.0 kafka3.6.1 项目时间:2025年1月 项目描述:这个项目搭建了一个基于 Nginx 和 Flask 的 Web 集群,使用 Filebeat 将 Nginx 的访问日志发送到 Kafka 集群。通过 Python 消费者程序解析日志…...
QML使用ChartView绘制饼状图
一、工程配置 首先修改CMakeLists.txt,按下图修改: find_package(Qt6 6.4 REQUIRED COMPONENTS Quick Widgets) PRIVATEtarget_link_libraries(appuntitledPRIVATE Qt6::QuickPRIVATE Qt6::Widgets )其次修改main.cpp,按下图修改ÿ…...
头歌实验--面向对象程序设计
目录 实验五 类的继承与派生 第1关:简易商品系统 任务描述 答案代码 第2关:公司支出计算 任务描述 答案代码 第3关:棱柱体问题 任务描述 答案代码 实验五 类的继承与派生 第1关:简易商品系统 任务描述 答案代码 #incl…...
DeepSeek-R1 蒸馏 Qwen 和 Llama 架构 企业级RAG知识库
“DeepSeek-R1的输出,蒸馏了6个小模型”意思是利用DeepSeek-R1这个大模型的输出结果,通过知识蒸馏技术训练出6个参数规模较小的模型,以下是具体解释: - **知识蒸馏技术原理**:知识蒸馏是一种模型压缩技术,核…...
App UI自动化--Appium学习--第二篇
如果第一篇在运行代码的时候出现问题,建议参考我的上一篇文章解决。 1、APP界面信息获取 adb logcat|grep -i displayed代码含义是获取当前应用的包名和界面名。 根据日志信息修改代码当中的包名和界面名,就可以跳转对应的界面。 2、界面元素获取 所…...
【SpringBoot实现全局API限频】 最佳实践
在 Spring Boot 中实现全局 API 限频(Rate Limiting)可以通过多种方式实现,这里推荐一个结合 拦截器 Redis 的分布式解决方案,适用于生产环境且具备良好的扩展性。 方案设计思路 核心目标:基于客户端标识(…...
Day1 25/2/14 FRI
【一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵)】https://www.bilibili.com/video/BV13g41157hK?p3&v…...
开发板适配之I2C-RTC
rx8010时钟芯片挂载在I2C1总线上,并且集成在主控板上。 硬件原理 IOMUX配置 rx8010时钟芯片挂载在I2C1总线上,I2C1数据IIC1_SDA和时钟IIC1_SCL,分别对应的PAD NAME为,UART4_TX_DATA、UART4_RX_DATA。 在arch/arm/boot/dts/imx6u…...
vuedraggable固定某一item的记录
文章目录 基础用法第一种第二种 限制itemdiaggable重新排序交换移动的两个元素的次序每次都重置item的index 基础用法 第一种 <draggable v-model"list" :options"dragOptions"><div class"item" v-for"item in list" :key…...
我的新书《青少年Python趣学编程(微课视频版)》出版了!
🎉 激动人心的时刻来临啦! 🎉 小伙伴们久等了,我的第一本新书 《青少年Python趣学编程(微课视频版)》 正式出版啦! 📚✨ 在这个AI时代,市面上的Python书籍常常过于枯燥&…...
前端开发入门一
前端开发入门一 已经有若干年没有web相关的代码了,以前主要是用C/C编写传统的GUI程序,涉及界面、多线程、网络等知识点。最近准备开发一个浏览器插件,才发现业界已经换了天地,只得重新开始学习了,好在基本的学习能力还…...
AI系统行为治理:构建确定性护栏与运行时安全控制
1. 项目概述:为AI系统构建确定性的行为护栏如果你正在构建一个会“动手”的AI应用——无论是能帮你写代码的智能助手,还是能操作数据库的自动化流程,甚至是部署在物理设备上的机器人——那么你迟早会面临一个核心问题:如何确保它只…...
新人如何快速融入技术团队?这5个细节决定你的第一印象
对于软件测试工程师而言,加入一个新的技术团队,挑战远不止于记住人名和门禁密码。你将面对的是一套陌生的系统架构、一份可能长达数百页的需求文档、一个仍在迭代中的自动化测试框架,以及一群拥有不同技术背景和沟通风格的开发伙伴。在这样的…...
PHP使用Intervention Image图像处理
在 Web 开发中,图像处理是常见需求:缩略图生成、水印添加、格式转换……但原生 PHP 的 GD 库 API 复杂且易出错。本文将提供Intervention ImagePHP 图像处理库从安装到高级用法的完整实战指南,它能用极简代码完成复杂的图像操作。 目录 安装…...
在线考试系统如何实现随机组卷
在现代教育和企业培训中,考试是评估学习效果、提升培训效率的重要工具。然而,传统的固定试卷模式存在诸多问题:题目重复率高、考试公平性难以保障、人工管理成本高。随着在线培训的发展,尤其是在大规模培训场景下,随机…...
为什么92%的Discord AI机器人3天内被封禁?ChatGPT合规集成的4个硬性红线,开发者必查
更多请点击: https://intelliparadigm.com 第一章:为什么92%的Discord AI机器人3天内被封禁?ChatGPT合规集成的4个硬性红线,开发者必查 Discord 并非开放沙盒——其 API 政策与《Developer Terms of Service》明确禁止未经用户明…...
ARM与中科创达物联网加速器:一站式平台如何重塑产品开发
1. 项目概述:ARM与中科创达的物联网生态加速器2015年,半导体IP巨头ARM与总部位于北京的中科创达(Thundersoft)联合宣布,将在中国建立“ARM创新生态加速器”。这个消息在当时可能只是科技新闻版块的一则快讯,…...
OctoSuite代码审查:深入理解GitHub数据模型设计的5个关键要点
OctoSuite代码审查:深入理解GitHub数据模型设计的5个关键要点 【免费下载链接】octosuite Terminal-based toolkit for GitHub data analysis. 项目地址: https://gitcode.com/gh_mirrors/oc/octosuite OctoSuite是一个强大的终端GitHub数据分析工具包&#…...
Battle City碰撞检测算法:精准命中与躲避的核心技术解析
Battle City碰撞检测算法:精准命中与躲避的核心技术解析 【免费下载链接】battle-city 🎮 Battle city remake built with react. 项目地址: https://gitcode.com/gh_mirrors/ba/battle-city 在经典的Battle City坦克大战游戏中,碰撞检…...
为什么需要做GEO优化?AI新时代的商业规则探索
2026年,一个加速蔓延的商业现象正在发生:消费者不再打开搜索引擎、翻阅列表、逐条点击蓝色链接——他们直接打开DeepSeek、豆包、Kimi等AI助手,用一句完整的话发起提问:“这个价位哪个品牌最值得买?”“敏感肌用什么护…...
【NotebookLM NLP辅助天花板级用法】:谷歌内部未公开的3类Prompt架构+2个隐藏API调用技巧
更多请点击: https://intelliparadigm.com 第一章:NotebookLM NLP任务辅助全景概览 NotebookLM 是 Google 推出的基于用户自有文档的实验性 AI 助手,专为研究者与工程师设计,其核心能力在于对上传文本进行深度语义理解与上下文感…...
