【博士每天一篇文献-COIL算法】Co-transport for class-incremental learning
1 介绍
年份:2021
会议:2021ACM
Zhou D W, Ye H J, Zhan D C. Co-transport for class-incremental learning[C]//Proceedings of the 29th ACM International Conference on Multimedia. 2021: 1645-1654.
本文提出的算法是CO-transport for class-Incremental Learning (COIL),其核心原理是通过类间语义关系(通过语义映射,将旧类别的分类器映射到新类别的分类器的转换机制)进行跨增量任务的知识传递,关键步骤包括前瞻性传输(Prospective Transport)和回顾性传输(Retrospective Transport)。前瞻性传输(Prospective Transport, PT)的技术原理是利用最优传输算法找到旧类别和新类别之间的语义映射,以此映射初始化新类别的分类器,从而快速适应新任务并减少随机初始化的负面影响。回顾性传输(Retrospective Transport, RT)的技术原理是将新类别的分类器通过语义映射反向传输到旧类别,以此作为额外的正则化项来强化对旧类别的记忆,有效防止遗忘旧知识。
2 创新点
- 双阶段传输机制(Co-transport):
- 提出了一种新的类增量学习框架COIL,该框架通过前瞻性传输(Prospective Transport)和回顾性传输(Retrospective Transport)两个阶段实现知识在新旧类别之间的传递。
- 前瞻性传输(Prospective Transport):
- 面对新类别时,通过语义映射将旧类别的分类器传输到新类别,作为新类别分类器的初始化,快速适应新任务,减少随机初始化的负面影响。
- 回顾性传输(Retrospective Transport):
- 为了克服遗忘现象,将新类别的分类器反向传输到旧类别,作为旧类别分类器的补充,增强模型对旧知识的保持。
- 语义映射(Semantic Mapping):
- 利用最优传输(Optimal Transport, OT)技术来确定类别间的语义关系,并据此构建新旧类别之间的映射,指导分类器的合成。
- 跨任务的知识关联:
- 强调了在增量学习过程中,新旧类别之间存在强烈的相关性,并通过关联这些关系来促进不同学习阶段之间的相互帮助。
- 双向知识流:
- 与以往单向知识流的方法不同,COIL实现了知识在新旧类别之间的双向流动,提高了模型对新任务的适应性和对旧知识的保持能力。
- 实验验证:
- 在多个基准和真实世界的多媒体数据集上进行了广泛的实验,验证了所提方法的有效性,并与现有最先进的方法进行了比较,显示出优越的性能。
3 算法
3.1 算法原理
- 初始化模型:
- 在第一个任务中,使用传统的训练方法训练模型,包括特征提取器(如CNN)和线性分类器。
- 面对新任务时的前瞻性传输(Prospective Transport, PT):
- 当新类别出现时,使用最优传输(Optimal Transport, OT)算法计算旧类别和新类别之间的语义映射T。
- 利用语义映射T将旧类别的分类器传输到新类别,作为新类别分类器的初始化。
- 训练数据的整合:
- 将新任务的数据与保存的旧类别样本(exemplars)合并,用于后续的训练。
- 训练过程:
- 在每个训练批次中,计算以下损失函数:
- 交叉熵损失(Cross-Entropy Loss),用于优化当前任务的新类别。
- 知识蒸馏损失(Knowledge Distillation Loss),用于保持对旧类别的记忆。
- 前瞻性传输损失(Prospective Transport Loss),用于调整新类别的预测概率,使其接近传输后的模型预测。
- 在每个训练批次中,计算以下损失函数:
- 回顾性传输(Retrospective Transport, RT):
- 随着新类别的学习,使用OT算法计算新类别和旧类别之间的语义映射T。
- 利用语义映射T将新类别的分类器传输回旧类别,以防止遗忘旧类别。
- 总损失函数的优化:
- 将上述所有损失函数组合起来,形成总损失函数LCOIL。
- 使用随机梯度下降(SGD)或其他优化算法更新模型参数。
- 迭代训练:
- 重复步骤4和5,直到达到预设的训练周期。
- 模型评估:
- 在每个任务结束后,评估模型在所有已见过的类别上的性能,确保模型在新类别上表现良好,同时没有遗忘旧类别。
- 处理下一个任务:
- 当新的任务到来时,重复步骤2至8,继续增量学习过程。
3.2 算法步骤
黄色部分表示前瞻性传输,它负责将旧的分类器传输到新的分类器,作为新任务的初始化。蓝色部分表示回顾性传输,它负责将新分类器传输回旧分类器,以克服遗忘问题。
- 初始化模型:
- 在第一个任务中,使用传统的训练方法训练模型,包括特征提取器(如CNN)和线性分类器。
- 面对新任务时的前瞻性传输(Prospective Transport, PT):
- 当新类别出现时,使用最优传输(Optimal Transport, OT)算法计算旧类别和新类别之间的语义映射T。
- 利用语义映射T将旧类别的分类器传输到新类别,作为新类别分类器的初始化。
- 训练数据的整合:
- 将新任务的数据与保存的旧类别样本(exemplars)合并,用于后续的训练。
- 训练过程:
- 在每个训练批次中,计算以下损失函数:
- 交叉熵损失(Cross-Entropy Loss),用于优化当前任务的新类别。
- 知识蒸馏损失(Knowledge Distillation Loss),用于保持对旧类别的记忆。
- 前瞻性传输损失(Prospective Transport Loss),用于调整新类别的预测概率,使其接近传输后的模型预测。
- 在每个训练批次中,计算以下损失函数:
- 回顾性传输(Retrospective Transport, RT):
- 随着新类别的学习,使用OT算法计算新类别和旧类别之间的语义映射T。
- 利用语义映射T将新类别的分类器传输回旧类别,以防止遗忘旧类别。
- 总损失函数的优化:
- 将上述所有损失函数组合起来,形成总损失函数LCOIL。
- 使用随机梯度下降(SGD)或其他优化算法更新模型参数。
- 迭代训练:
- 重复步骤4和5,直到达到预设的训练周期。
- 模型评估:
- 在每个任务结束后,评估模型在所有已见过的类别上的性能,确保模型在新类别上表现良好,同时没有遗忘旧类别。
- 处理下一个任务:
- 当新的任务到来时,重复步骤2至8,继续增量学习过程。
4 思考
(1)什么叫语义映射T?
语义映射T在本文中指的是一种将旧类别的分类器映射到新类别的分类器的转换机制。这种映射基于类别之间的语义关系,即不同类别在特征空间中的相似性或相关性。具体来说,语义映射T是一个线性变换,它能够将一个类别集合上的分类器权重转移到另一个类别集合上,从而实现知识从旧类别到新类别的传递。
在COIL算法中,语义映射T的计算依赖于最优传输(Optimal Transport, OT)理论,其核心思想是找到两个概率分布(在这里是类别的分布)之间的最佳对应关系,使得从一个分布到另一个分布的“运输”成本最小化。这里的“运输”成本通常是指类别中心嵌入之间的距离,它反映了类别之间的相似度。
(2)最优传输(Optimal Transport, OT)算法计算旧类别和新类别之间的语义映射T的具体步骤
- 定义类中心嵌入(Class Center Embeddings):
- 对于每个类别,计算其样本在特征空间中的中心嵌入。这是通过取该类别所有样本特征向量的平均值来实现的:
μ i = 1 ∣ E i ∣ ∑ x ∈ E i ϕ ( x ) \mu_i = \frac{1}{|E_i|} \sum_{x \in E_i} \phi(x) μi=∣Ei∣1∑x∈Eiϕ(x)
其中, E i E_i Ei是类别 i i i的样本集合, ϕ ( x ) \phi(x) ϕ(x)是特征提取函数, μ i \mu_i μi是类别 i i i的中心嵌入。
- 对于每个类别,计算其样本在特征空间中的中心嵌入。这是通过取该类别所有样本特征向量的平均值来实现的:
- 计算运输成本(Transportation Cost):
- 使用类中心嵌入之间的欧几里得距离作为运输成本,即两个类别之间的距离越大,运输成本越高:
C i j = ∥ μ i − μ j ∥ 2 2 C_{ij} = \|\mu_i - \mu_j\|_2^2 Cij=∥μi−μj∥22
其中, C i j C_{ij} Cij是类别 i i i和类别 j j j之间的运输成本。
- 使用类中心嵌入之间的欧几里得距离作为运输成本,即两个类别之间的距离越大,运输成本越高:
- 设置优化问题(Optimization Problem):
- 定义一个运输计划 T T T,它是一个矩阵,其元素 T i j T_{ij} Tij表示从类别 i i i运输到类别 j j j的概率。优化问题的目标是最小化总运输成本,同时满足运输的约束条件:
min T ⟨ T , C ⟩ \min_T \langle T, C \rangle minT⟨T,C⟩
s.t. T 1 = α 1 , T T 1 = α 2 , T ≥ 0 \text{s.t. } T1 = \alpha_1, \quad T^T1 = \alpha_2, \quad T \geq 0 s.t. T1=α1,TT1=α2,T≥0
其中, α 1 \alpha_1 α1和 α 2 \alpha_2 α2分别是源和目标的边际分布,通常设置为均匀分布。
- 使用Sinkhorn算法求解(Sinkhorn Algorithm):
- 利用Sinkhorn算法来求解上述优化问题。Sinkhorn算法是一种有效的算法,用于计算两个概率分布之间的熵正则化的OT问题。算法步骤如下:
- 初始化运输矩阵 T T T。
- 迭代更新 T T T的元素,直到收敛:
* T i j ← T i j exp ( − λ C i j ) ∑ k T i k exp ( − λ C k j ) T_{ij} \leftarrow T_{ij} \frac{\exp(-\lambda C_{ij})}{\sum_{k} T_{ik} \exp(-\lambda C_{kj})} Tij←Tij∑kTikexp(−λCkj)exp(−λCij) 其中, λ \lambda λ是一个正则化参数,控制运输成本的影响。
- 利用Sinkhorn算法来求解上述优化问题。Sinkhorn算法是一种有效的算法,用于计算两个概率分布之间的熵正则化的OT问题。算法步骤如下:
- 获得语义映射(Semantic Mapping):
- 通过Sinkhorn算法得到的运输矩阵 T T T就是旧类别和新类别之间的语义映射。这个映射捕获了类别之间的相似性,并用于指导分类器的传输。
- 应用语义映射(Apply Semantic Mapping):
- 使用得到的语义映射 T T T来调整旧类别的分类器权重,生成新类别的初始分类器:
W ˉ new = T ⋅ W old \bar{W}_{\text{new}} = T \cdot W_{\text{old}} Wˉnew=T⋅Wold
其中, W old W_{\text{old}} Wold是旧类别的分类器权重, W ˉ new \bar{W}_{\text{new}} Wˉnew是新类别的初始分类器权重。
(3)特征空间中的语义关系
强调了在特征空间中提取类别之间的语义关系的重要性。这些语义关系可以帮助我们理解不同类别之间的相似性和差异性。
相关文章:
【博士每天一篇文献-COIL算法】Co-transport for class-incremental learning
1 介绍 年份:2021 会议:2021ACM Zhou D W, Ye H J, Zhan D C. Co-transport for class-incremental learning[C]//Proceedings of the 29th ACM International Conference on Multimedia. 2021: 1645-1654. 本文提出的算法是CO-transport for clas…...
AI与BI的火花:大语言模型如何重塑商业智能的未来
大家好,我是独孤风。 在当今这个数据驱动的时代,企业对于信息的需求如同对于氧气的需求一般至关重要。商业智能(BI)作为企业获取、分析和呈现数据的关键工具,正在经历一场深刻的变革,而这一变革的催化剂正是…...
C++设计模式(建造者、中介者、备忘录)
一、建造者模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 示例: //房子(产品类) class House { private:int rooms;int windows;string decoration; public:void setRooms(int r) {rooms …...
【数据结构】遍历二叉树
遍历二叉树的算法描述(递归定义) 先序遍历 若二叉树为空,则空操作; 否则 (1)访问根节点 (2)先序遍历左子树 (3)先序遍历右子树 中序遍历 若二叉树为空…...
鸿蒙获取 APP 信息及手机信息
前言:获取 APP 版本信息可以通过 bundleManager.getBundleInfoForSelfSync(bundleFlags) 去获取,获取手机信息可以通过 kit.BasicServicesKit 库去获取,以下是封装好的工具类。 import bundleManager from ohos.bundle.bundleManager; impo…...
OpenWRT下深入了解IPv6——SLAAC
一、SLAAC(无状态地址自动配置) 1.基本原理 SLAAC 是 IPv6 中的一种地址自动配置机制,它允许设备根据网络中的路由器通告信息和自身的 MAC 地址自动生成 IPv6 地址。在 IPv6 网络中,MAC 地址长度为 48 位,而 IPv6 地…...
UE5水文章 UI按钮样式快捷复制黏贴
shift右键拷贝 shift右键黏贴...
迭代器模式的理解和实践
引言 在软件开发中,我们经常需要遍历容器对象(如数组、列表、集合等)中的元素。如果每个容器对象都实现自己的遍历算法,那么代码将会变得冗余且难以维护。为了解决这个问题,迭代器模式应运而生。迭代器模式是一种行为型…...
Python __func 与 _func 的区别引起的思考
文章目录 __function_function深入名称修饰机制名称修饰的目的实现原理 属性访问控制的高级模式基本模式扩展复杂的转换和验证逻辑带有日志和审计的访问控制 如果突然让我说一说 Python中的__function和_function有哪些不同的约定和用途,我好像一下子没法说出很多东…...
python学opencv|读取视频(二)制作gif
【1】引言 前述已经完成了图像和视频的读取学习,本次课学习制作gif格式动图。 【2】教程 实际上想制作gif格式动图是一个顺理成章的操作,完成了图像和视频的处理,那就自然而然会对gif的处理也产生兴趣。 不过在opencv官网、matplotlib官网…...
Redmi AX3000 (RA81) 路由器恢复原厂固件
最近给Redmi AX3000 (RA81) 刷了OpenWrt固件,但是存在各种小问题,因此决定刷回原厂固件。刷机之前保证能够访问路由器ssh,否则请百度救砖教程。 准备工具 Redmi AX3000 (RA81) 原厂分区文件 [github下载地址 / csdn下载地址]小米路由器修复…...
【调试工具】USB 转 UART 适配器(USB 转 TTL)
「USB 转 TTL 转换器」是错误的叫法,正确的叫法应该为 「USB 转 UART 适配器」。 Device connection 注意端口的交叉连接,Device1_TX<---->Device2_RX USB-to-UART adapter GND 记得接地。 使用: 当 TX,RX 需要电平为 0-3.3V 时&am…...
【YOLO部署Android安卓手机APP】YOLOv11部署到安卓实时目标检测识别——以火焰烟雾目标检测识别举例(可自定义更换其他目标)
前言:本项目基于YOLOv11部署到手机APP实现对火焰烟雾的检测识别,当然,以此你可以按照本项目开发步骤扩展更换为其他目标进行检测,例如更换为车牌、手势、人脸面部活动、人脸表情、火焰烟雾、行人、口罩、行为、水果、植物、农作物等等部署手机APP进行检测。本文为详细设计/…...
Python 中的 __slots__ 属性有什么作用?
__slots__ 是Python类中的一种特殊属性,它允许你显式地声明一个类的实例可以拥有的属性。 这不仅有助于节省内存,还能提高属性访问的速度,并且防止动态添加不属于设计的属性。 在大型项目或者对性能敏感的应用程序中,正确使用 _…...
【H2O2|全栈】Node.js与MySQL连接
目录 前言 开篇语 准备工作 初始配置 创建连接池 操作数据库 封装方法 结束语 前言 开篇语 本节讲解如何使用Node.js实现与MySQL数据库的连接,并将该过程进行函数封装。 与基础部分的语法相比,ES6的语法进行了一些更加严谨的约束和优化&#…...
【大数据技术基础】 课程 第3章 Hadoop的安装和使用 大数据基础编程、实验和案例教程(第2版)
第3章 Hadoop的安装和使用 3.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构。Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中。H…...
DDR4与DDR3服务器内存的关键区别有哪些?
内存作为服务器性能的关键组件之一,已经经历了从DDR3到DDR4的过渡。DDR4内存相较于DDR3在多个方面有所提升,包括速度、带宽、功耗以及数据传输效率等。然而,尽管DDR4内存在性能上占有优势,DDR3内存依然在一些特定场景中得到了广泛…...
OceanBase 的探索与实践
作者:来自 vivo 互联网数据库团队- Xu Shaohui 本文总结了目前我们遇到的痛点问题并通过 OceanBase 的技术方案解决了这些痛点问题,完整的描述了 OceanBase 的实施落地,通过迁移到 OceanBase 实践案例中遇到的问题与解决方案让大家能更好的了…...
2024年安全员-A证证模拟考试题库及安全员-A证理论考试试题
2024年安全员-A证模拟考试题库及理论考试试题(一) 单选题 根据《建筑施工企业主要负责人、项目负责人和专职安全生产管理人员安全生产管理规定》,项目负责人每月带班生产时间不得少于本月施工时间的( )。 A. 60% B. …...
安装Docker并使用WSL
引言 Windows Subsystem for Linux (WSL) 是一个在Windows上运行Linux二进制可执行文件(ELF格式)的兼容层。它允许开发者直接在Windows上运行Linux环境,而无需使用虚拟机。Docker是一个开源的应用容器引擎,它允许开发者打包应用以…...
【TCP 网络通信(发送端 + 接收端)实例 —— Python】
TCP 网络通信(发送端 接收端)实例 —— Python 1. 引言2. 创建 TCP 服务器(接收端)2.1 代码示例:TCP 服务器2.2 代码解释: 3. 创建 TCP 客户端(发送端)3.1 代码示例:TCP…...
PostgreSQL和Oracle的sql差异
PostgreSQL和Oracle的sql差异 1.rownum (1)Oracle分页查询使用rownum,PostgreSQL使用limit offset ORACLEPOSTGRESQLselect * from (select rownum r,e.* from emp e where rownum <5) t where r>0;select * from emp limit 5 offset…...
阻塞队列详解
阻塞队列介绍 队列 是限定在一端进行插入,另一端进行删除的特殊线性表。先进先出(FIFO)线性表。允许出队的一端称为队头,允许入队的一端称为队尾。 数据结构演示网站: https://www.cs.usfca.edu/~galles/visualization/Algorithms.html Q…...
kali安装谷歌输入法
临时隐匿你IP地址 ifconfig 查询kali现在所用ip ifconfig eth0 所需要修改的ip/掩码24 修改临时ip格式命令 安装中文输入法命令 临时隐匿你IP地址 ifconfig 查询kali现在所用ip ifconfig eth0 所需要修改的ip/掩码24 修改临时ip格式命令安装中文输入法命令 apt-get in…...
C语言:编译与链接
本篇博客给大家带来的是代码从运行到生成可执行文件的流程和原理 🐟🐟文章专栏:C语言 🚀🚀若有问题评论区下讨论,我会及时回答 ❤❤欢迎大家点赞、收藏、分享 你们的支持就是我创造的动力 今日思想…...
VTK编程指南<五>:VTK中的坐标系统、空间变换及VTK矩阵详解
1、坐标系统 计算机图形学里常用的坐标系统主要有 4 种,分别是 Model 坐标系统、World 坐标系统、View坐标系统和 Display坐标系统(这些名词在不同的书里的中文表述均有所差别,所以直接使用英文名词表示),此外还有两种表示坐标点的方式&#…...
Linux centos7 下载MySQL5.7仓库的命令
wget 是一个非常强大的命令行工具,用于从网络上下载文件。它是 Linux 和其他 Unix-like 系统中常用的工具之一。wget 命令的各个参数有着不同的含义,下面是您提供的命令 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.onarch.r…...
Java Serializable 序列化
Java的Serializable接口是Java序列化机制的核心,它允许一个对象的状态被转换为字节流,从而可以方便地进行存储或传输。 序列化后的对象可以被写到数据库、存储到文件系统,或者通过网络传输。 要在 Java 中使一个类可序列化,你需要…...
【QNX+Android虚拟化方案】136 - QNX 侧 Coredump 文件解析
【QNX+Android虚拟化方案】136 - QNX 侧 Coredump 文件解析 1. 初始化 QNX 开发环境2. 使用 gdb 解析 Coredump3. 查看 backtrace:bt4. 查看所有线程信息5. 打印线程19的回溯信息6. 打印所有线程的回溯信息7. gdb info 相关的指令8. 查看使用了哪些共享库9. 查看出错的行号及地…...
ORB-SLAM2 ---- 词袋模型BOW
文章目录 一、回环检测的重要性二、回环检测的方法三、词袋模型四、词典五、实例展示1. 计算评分2. 找出有相同单词的关键帧3. 用词袋进行快速匹配 六、总结 一、回环检测的重要性 在前面的学习我们知道,噪声的影响是不可消除的,而上一帧的误差不可避免的…...
win11无法检测到其他显示器-NVIDIA
https://www.nvidia.cn/software/nvidia-app/ https://cn.download.nvidia.cn/nvapp/client/11.0.1.163/NVIDIA_app_v11.0.1.163.exe 下载安装后,检测驱动、更新驱动。...
基于Java+Swing+Mysql的网络聊天室
博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…...
docker安装Elasticsearch
公网即可拉取镜像,这个镜像是可以拉得到的,版本号根据自己需要的来 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.15运行命令,xxxxxxxxxxxxxxxxxxxxxxxx_password 为自己的密码 docker run -d --name elasticsearch \-…...
Elasticsearch入门之HTTP高级查询操作
前言 上一篇博客我们学习了es的一些基础操作如下: 创建索引(创建表 create table)查看索引(查看表show tables)查看单个索引(查看单个表show create table)删除索引(删除表&#x…...
前端知识1html
VScode一些快捷键 Ctrl/——注释 !——生成html框架元素 *n——生成n个标签 直接书写html的名字回车生成对应的标签 常见标签 span: <span style"color: red;">hello</span> <span>demo</span> span实现: 标题…...
《黑神话:悟空》闪退,提示D3D12崩溃,游戏崩溃无法启动是什么原因?要怎么解决?
《黑神话:悟空》闪退、D3D12崩溃及游戏无法启动:原因、解决方案与预防措施 作为一名软件开发从业者,我深知电脑游戏运行时可能遇到的各种问题,尤其是像《黑神话:悟空》这样的高品质游戏,其对硬件和系统配置…...
[GESP202312 五级] 烹饪问题
题目传送门 B3930 [GESP202312 五级] 烹饪问题 题目描述 有 N N N 种食材,编号从 0 0 0 至 N − 1 N-1 N−1,其中第 i i i 种食材的美味度为 a i a_i ai。 不同食材之间的组合可能产生奇妙的化学反应。具体来说,如果两种食材的美味…...
[代码随想录10]栈和队列
前言 栈和队列在STL中扮演的什么角色呢?我们知道STL的六大组件是:容器,适配器,算法,迭代器,空间配置器,仿函数,而我们今天要学的栈和队列就是属于适配器里面的,为什么栈和…...
TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面
前言 前篇文章使用Tesseract进行图片文字识别介绍了如何安装TesseractOCR与TesseractOCR的命令行使用。但在日常使用过程中,命令行使用还是不太方便的,因此今天介绍一下如何使用WPF/C#构建TesseractOCR简单易用的用户界面。 普通用户使用 参照上一篇教…...
Java、JavaWeb、数据库-图书管理系统
这一章主要是把上一章写在网页里的java 代码从网页中分离出来,放在专门的servlet类中。每一个servlet类对应一个数据库的表。 规范性问题: 1、dao包存放有关数据库的信息:BaseDao包就放数据库加载驱动和增删改和关闭资源;而其他…...
轻量化特征融合 | YOLOv8 引入一种基于增强层间特征相关性的轻量级特征融合网络 | 北理工新作
本改进已同步到Magic框架 摘要—无人机图像中的小目标检测由于分辨率低和背景融合等因素具有挑战性,导致特征信息有限。多尺度特征融合可以通过捕获不同尺度的信息来增强检测,但传统策略效果不佳。简单的连接或加法操作无法充分利用多尺度融合的优势,导致特征之间的相关性不…...
U盘文件乱码:原因、恢复、预防与总结
U盘文件乱码现象解析 U盘作为我们日常生活中常用的便携式存储设备,时常会遭遇文件乱码的问题。这种乱码现象通常表现为文件名变成一堆无意义的字符,文件内容无法正常查看,甚至文件根本无法被打开。当我们在电脑上插入U盘,准备查看…...
OpenStack介绍
OpenStack概述 OpenStack是一个开源的云计算管理平台软件,主要用于构建和管理云计算环境。它允许企业或组织通过数据中心的物理服务器创建和管理虚拟机、存储资源和网络等云计算服务。其核心组件包括计算(Nova)、网络(Neutron)、存储(Cinder、Swift)等。这些组件相互协作…...
OpenGL编译用户着色器shader
shader相信很多朋友们都听说过,shader就是运行再GPU上的程序。虽然是这么说,但是我们发现,很多IDE开发工具比如说visual studio 没有办法直接去运行shader代码。这是因为,许多编译器不会自动将shader文件编译成可执行的代码然后发…...
C++ 已经知道,中序和后序,推算前序的方法。
已经知道,中序和后序,推算前序的方法。 #include<iostream> using namespace std; string ldr_str,lrd_str;//中序遍历和后序遍历 void build(int l1,int r1,int l2,int r2){if(l1>r1) return ;//边界条件,说明已经没有元素了cout<<lrd_s…...
unity打包到安卓帧率降低
这个问题遇到过很多次了我的做法就是直接设置Application.targetFrameRate60 参考...
计算机网络复习——概念强化作业
物理层负责网络通信的二进制传输 用于将MAC地址解析为IP地址的协议为RARP。 一个交换机接收到一帧,其目的地址在它的MAC地址表中查不到,交换机应该向除了来的端口外的所有其它端口转发。 关于ICMP协议,下面的论述中正确的是ICMP可传送IP通信过程中出现的错误信息。 在B类网络…...
DO、DTO、VO都是干什么的?
DO、DTO、VO 是三个常见的Java 对象,它们都是用来承载数据的,但是在不同的场景下有着不同的用途. 1.DO(Domain Object):领域对象,也称为实体对象。D0 通常用于数据库表的映射,DO中包含了实体的属性以及对实体的操作方法。DO 对应…...
深入探索 Node.js:构建强大的后端应用
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
【Agent】构建智能诗歌创作系统:基于多 Agent 的协同创作实现
在探索大语言模型的创意应用过程中,我们开发了一个基于多 Agent 的智能诗歌创作系统。本文将介绍如何通过多个专业化的 Agent 协同工作,实现根据地点和天气信息自动创作诗歌的功能。 GitHub Code 项目地址 核心架构设计 1. Agent 基类设计 from pydan…...