对patch深入理解下篇:Patch+LSTM实现以及改进策略整理
我在去年11月份写了pat入理解的上篇,主要介绍patch的原理和代码实现过程。文章发布后很多朋友催更下篇,其实一直在积累素材,因为介绍完原理和实现之后,下一步肯定是要考虑如何改进。在这之前,首先,我们接着上一篇的内容,实现了一个LSTM+patch的例子,结果表明加上Patch之后确实对LSTM在各指标和预测长度上均有明显的效果提升。然后,本篇文章还重点介绍了最近一段时间我读到的对patch的几种改进策略,以及自己的一些思考。
这里再挖个坑吧,下一篇我计划写一下如何在LSTM+Patch的基础上,通过傅立叶进行降噪,并探索实现动态切分patch的方法。欢迎关注~
实现LSTM+Patch
我的这份代码是在Are Transformers Effective for Time Series Forecasting? (AAAI 2023)这篇文章代码的基础上写的。主要在model文件夹添加了LSTM和patch_LSTM两个类,大家复制下面的代码,把文件放入到model文件夹即可运行。此外,为了简化,没有做patch切分时候的补齐。包括hidden_size等一些参数也是直接写到了模型里面,所以严格来说,代码并不是很规范,以实现效果为主。
01 LSTM 代码实现
下面是原始LSTM模型的代码实现,实现过程已经重复过多次,直接看代码,就不在展开细致讲解。
class Model(nn.Module):"""Just one Linear layer"""def __init__(self, configs):super(Model, self).__init__()self.seq_len = configs.seq_lenself.pred_len = configs.pred_lenself.hidden_size = 64self.num_layers = 2self.enc_in = configs.enc_inself.lstm = nn.LSTM(self.enc_in, self.hidden_size, self.num_layers, batch_first=True)self.fc = nn.Linear(self.hidden_size, self.pred_len)self.fc2 = nn.Linear(self.seq_len, self.enc_in)def forward(self, x):# x: [Batch, Input length, Channel]h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device) # 初始化隐藏状态h0c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device) # 初始化记忆状态c0out, _ = self.lstm(x, (h0, c0)) # out:[bs,seq,hid]out = self.fc(out) # out:[bs,seq,pred_len]out = self.fc2(out.permute(0, 2, 1)) # out: [bs, pred_len, channel]return out # [Batch, Output length, Channel]
02 LSTM+patch
下面是代码实现的LSTM+patch的实现过程。这里我设置了步长为12、切分长度也为12,这样相当于没有重复的切分。此外,为了简化很多超参数也没有特意调参寻优,我们还是把重点放到patch实现上,特别要关注数据维度的变化:
-
进入forward函数时x的维度: [Batch, seq_len, Channel]
-
置换后两个维度,并用unfold函数切分:[bs, ch, sql]=>[bs, ch, pum, plen],pnum是切分后块的数量。
-
之前讲过,放回到LSTM、Transformer时,数据还是要变回三维,因此这里我们把batch和channel合并到一起,数据维度变成了:[(bs*ch), pnum, plen]
-
此时已经可以放入到模型建模,LSTM输出结果的维度是:[(bs*ch), plen, hidden],然后我们通过线性层和reshape操作,把维度调整回[(bs,pred_len, ch]
代码如下,其实就是维度拆分、合并。另外欢迎大家纠错
class Model(nn.Module):"""Just one Linear layer"""def __init__(self, configs):super(Model, self).__init__()self.seq_len = configs.seq_len #336self.pred_len = configs.pred_lenself.hidden_size = 64self.num_layers = 2self.enc_in = configs.enc_in#patchself.plen = 12self.pnum = 28 # seq_len/plen# LSTM 这里 self.enc_in => self.pnumself.lstm = nn.LSTM(self.pnum, self.hidden_size, self.num_layers, batch_first=True)self.fc = nn.Linear(self.hidden_size, self.pnum)self.fc2 = nn.Linear(self.seq_len, self.pred_len)# self.fc3 = nn.Linear(self.seq_len, self.enc_in)def forward(self, x): # x: [Batch, seq_len, Channel]x_shape = x.size()# patchingif x.size(1) == self.seq_len: # 这里为了简单,就直接定义patch的切分步长为12,不重合,注意336恰好能整除12x = x.permute(0, 2, 1) # [bs, ch, sql]=>[16,21,336]x = x.unfold(dimension=-1, size=12, step=12) # [bs, ch, pum, plen]=>[16,21,28,12]x = torch.reshape(x,(x.shape[0]*x.shape[1], x.shape[2], x.shape[3])) # [(bs*ch), pnum, plen]=>[336,28,12] 相当于原来的[bs, ch, sql]x = x.permute(0, 2, 1)h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device) # 初始化隐藏状态h0c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device) # 初始化记忆状态c0out, _ = self.lstm(x, (h0, c0)) # out:[(bs*ch), plen, hidden]out = self.fc(out)out = torch.reshape(out, (x_shape[0], x_shape[1], -1)) # out: [bs, ch, ()]out = self.fc2(out.permute(0, 2, 1)) # out: []return out.permute(0, 2, 1) # [Batch, Output length, Channel]
下面是我跑的几组实验,验证了在不同的预测长度下,原始LSTM和Patch+LSTM的实验结果对比。首先大家能看到,添加Patch后,各项指标在不同的预测长度上提升都是非常明显的。其次,线性模型比LSTM效果好很多~
你肯定也能想到现在自己定义patch的长度为12,滑动步长为12,是没有依据的,没错!这些都是可以改进的地方。这就接到下文了,我们来阅读近期三篇对patch的一些改进工作。
原始Patch的不足
还是先回顾一下patch的具体操作,是把一条序列切分成片段,然后按照片段进行建模。好处在于:1、保留更长的前后信息;2、节约transformer计算成本。
那原始的patch是否有不足呢?有的,首先原始patch是对所有的数据集按照相同的片段长度进行切分。但实际情况是不同数据集的采样频率有巨大差距。如下图所示,像汇率数据集、疾病数据集、交通数据集的数据模式显然是不一样的,那么采样频率是分钟的和小时都用同样的长度切显然不合理。
所以对patch的第一种改进策略就是:按照数据集的差异进行动态切分,学术一点的名字就是自适应切分🙂。
对Patch的改进
这里我挑选出三个比较有代表性的改进策略,分别是LPTM、PatchMLP、Medformer。这三个工作
都看到了原始Patch的不足,我们都做过论文解读,感兴趣的可以翻看之前的文章,这里我们逐一看一下他们是怎么做的。
01 LPTM
论文题目:Large Pre-trained time series models for cross-domain Time series analysis tasks(NIPS24)
论文思路如果用一句话来概括那就是暴力枚举,但GitHub代码我没跑通。主要还是学思路。
LPTM的patch切分可以分为四个步骤:首先是切分,通过双层循环,枚举从i到j的所有切分方式,切分完之后进行打分;然后,挑选以i为起点的所有片段中,得分最高的片段;这样做能保证序列是连续的,但带来一个问题,切分的片段大概率是有重复的。所以接着从上步得到的序列集合中,逐个剔除评分最低的片段,直到集合不连续。最后,通过注意力机制解决序列不连续的问题。
这里有个问题其实论文是有所回避的,模型变量间是否应该建模,既是通道独立还是通道依赖,这个问题在下一篇论文会给出一个方案。
02 PatchMLP
论文题目:Unlocking the Power of Patch: Patch-Based MLP for Long-Term Time Series Forecasting(AAAI25)
Patch+MLP这个思路估计很多人都想到过,但本文做了两点创新,其一是通过滑动平均来提取平滑分量和含有噪声的残差。请注意,无论是滑动平均还是傅立叶变换去噪声,很多论文的结果都表明去噪声确实是一种加点的方法,如果自己模型提点到了瓶颈,不妨试一下去噪声😊。
其二就是多尺度、跨通道的patch切分和嵌入方法。对于特定的尺度 p∈P,时间序列首先被分割成非重叠的patch,每个patch的长度对应于 p。这种分割过程生成了patch序列 x_p∈R^(N×p),其中 N 是patch的数量。切分完成后,在进行线性嵌入,每个patch序列 x_p通过单层线性层进行嵌入,生成潜在向量 x_e∈R^(N×d),其中 d 是嵌入维度,不同尺度的patch可以有不同的嵌入维度。最后,展开这些潜在向量获得最终的嵌入向量 X∈R^(1×d_model) ,其中 d_model是输入模型的最终嵌入维度。以上策略允许模型在不同时间跨度上灵活学习代表性的特征,从而提高预测的准确性和模型的泛化能力。
看核心代码,默认的尺度是[48,24,12,6],其实这个粒度的选择本身就有问题,枚举太暴力,但本文这样定义好像也没有依据。
03 Medformer
论文题目:Medformer: A Multi-Granularity Patching Transformer for Medical Time-Series Classification
还是先看论文做patch的思路,大体来说就是跨通道多粒度patch切分,然后通过注意力机制融合。
首先,使用跨通道patch嵌入来有效捕捉多时间戳和跨通道特征。将多变量时间序列样本分割成多个跨通道的非重叠patch片段,这些patch被映射到潜在嵌入空间并进行数据增强。公式如下:
其实还是做线性投影,注意这里的最大的不同就是跨通道。
其次,采用多粒度patch嵌入而不是固定长度,使模型能够以不同尺度捕捉通道特征。每个patch长度代表一个独特的粒度,多粒度patch嵌入自动对应不同的采样频率,从而模拟不同的频带并捕捉特定频带的特征。
最后,引入了两级多粒度自注意力机制,分别进行粒内自注意力和粒间自注意力。粒内自注意力在同一粒度内捕捉特征,而粒间自注意力在不同粒度之间捕捉相关性。
不过简单翻看了代码,发现还是依赖于自定义的粒度。
个人理解
从Patch TST出来有快两年了,围绕patch的改进工作有很多,用一位好友的话说现在的改进与实现并不够“优雅”。你会发现实际上模型并不能做到自适应的进行patch切分。多数模型依赖于枚举、自定义的方式实现。因此作者认为围绕Patch的改进仍然有改进空间。挖个坑,下一篇准备在LSTM+Patch的基础上,通过傅立叶进行降噪,并探索实现动态切分patch的方法。欢迎关注~
欢迎大家加入科学最TOP的知识星球,星球创办初期价格最优惠,目前更新的LSTM入门的系列文章,适配入门学习,均提供完整代码!)
(后台回复“交流”加入讨论群,回复“资源”获取2024年度论文讲解合集)
相关文章:
对patch深入理解下篇:Patch+LSTM实现以及改进策略整理
我在去年11月份写了pat入理解的上篇,主要介绍patch的原理和代码实现过程。文章发布后很多朋友催更下篇,其实一直在积累素材,因为介绍完原理和实现之后,下一步肯定是要考虑如何改进。在这之前,首先,我们接着…...
线程同步与互斥(互斥)
目录 线程互斥 进程线程间的互斥相关背景概念 互斥量mutex 互斥量的接⼝ 初始化互斥量 初始化互斥量有两种⽅法 销毁互斥量 互斥量加锁和解锁 加锁的使用 互斥量实现原理探究 互斥量的封装 Mutex.hpp Main.cc 线程互斥 进程线程间的互斥相关背景概念 临界资源&…...
基于RFID的智能家居系统设计与实现
标题:基于RFID的智能家居系统设计与实现 内容:1.摘要 随着物联网技术的飞速发展,智能家居系统成为了人们关注的焦点。本研究的目的是设计并实现一个基于RFID(射频识别)的智能家居系统,以提高家居的智能化水平和用户的生活便利性。…...
JAVA设计模式——(六)装饰模式(Decorator Pattern)
JAVA设计模式——(六)装饰模式(Decorator Pattern) 介绍理解实现被装饰类被装饰类的具体实现装饰类装饰类具体实现测试 适用场景 介绍 动态给一个对象添加一些额外的功能,动态的扩展其功能。 理解 装饰模式…...
CGAL 网格等高线计算
文章目录 一、简介二、实现代码三、实现效果一、简介 这里等高线的计算其实很简单,使用不同高度的水平面与网格进行相交,最后获取不同高度的相交线即可。 二、实现代码 #include <iostream> #include <iterator> #include <map>...
Sharding-JDBC 系列专题 - 第十篇:ShardingSphere 生态与未来趋势
Sharding-JDBC 系列专题 - 第十篇:ShardingSphere 生态与未来趋势 本系列专题旨在帮助开发者全面掌握 Sharding-JDBC,一个轻量级的分布式数据库中间件。本篇作为系列的第十篇,也是本系列的总结篇,将全面回顾 Apache ShardingSphere 生态,包括其核心组件、功能模块和与其他…...
ETL 数据集成都包含哪些?
一、ETL 数据集成都包含哪些? 数字化时代数据已成为企业最为宝贵的资产之一。然而,企业的数据往往分散在多个不同的系统和平台中,如关系型数据库、文件系统、API 等。为了将这些分散的数据整合起来,为企业决策提供全面、准确的支…...
windows系统自定义powshell批处理脚本
windows自定义powshell批处理脚本 前几天看到大神自定义批处理骚操作操作,觉得很有意思,本篇文章记录一下入门学习笔记。 PowerShell 是一种功能强大的脚本语言和命令行外壳,基于.NET Framework,广泛应用于 Windows 系统管理、自…...
【计算机视觉】CV实战项目 - 基于YOLOv5与DeepSORT的智能交通监控系统:原理、实战与优化
基于YOLOv5与DeepSORT的智能交通监控系统:原理、实战与优化 一、项目架构与技术解析1.1 核心算法架构1.2 学术基础 二、实战环境配置2.1 硬件要求与系统配置2.2 分步安装指南 三、核心功能实战3.1 基础车辆计数3.2 自定义检测类别3.3 多区域计数配置 四、性能优化技…...
Java基础系列-HashMap源码解析3-红黑树
文章目录 红黑树定义与AVL树对比插入节点插入节点是根节点插入节点的叔叔是红色插入节点的叔叔是黑色 构建示例删除节点只有左子树/只有右子树 只有左孩子/只有右孩子没有孩子如果双黑节点的兄弟是黑色:如果双黑节点的兄弟是红色: 总结 红黑树 定义 与…...
Linux系统的延迟任务及定时任务
延迟任务的发起 在系统中我们可以使用at命令来发起延迟任务 at命令执行是调用的是atd服务,即使系统最小化安装atd也会被安装到系统中 at 任务信息存放在系统中/var/spool/at目录中 at 任务的日志文件被存放到/var/log/cron中 at 任务执行时如果遇到系统处于关闭状态…...
【蓝桥杯】水质检测
水质检测 题目描述 小明需要在一条 2 n 2 \times n 2n 的河床上铺设水质检测器。在他铺设之前,河床上已经存在一些检测器。如果两个检测器上下或者左右相邻,那么这两个检测器就是互相连通的。连通具有传递性,即如果 A A A 和 B B B 连通…...
【晶振】晶振的工作原理及其与单片机关系
晶振(晶体振荡器)是电子设备中常见的元件,其核心功能是提供稳定的时钟信号,而单片机(MCU)依赖这一信号来同步内部操作。以下是晶振的工作原理及其与单片机关系的详细说明: 一、晶振的工作原理 压电效应与谐振 晶振的核心是石英晶体,利用其压电效应: 当在晶体两端施加电…...
配置 C/C++ 语言智能感知(IntelliSense)的 c_cpp_properties.json 文件内容
配置 C/C 语言智能感知(IntelliSense)的 c_cpp_properties.json 文件内容 {"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**","/opt/ros/humble/include/**&quo…...
Postgresql源码(143)统计信息基础知识(带实例)
概念与总结 高频值(Most Common Values, MCV) 存储在 most_common_vals 中。每个高频值的频率通过 most_common_freqs 单独记录(例如 0.010966667 等)。MCV 用于优化等值查询(如 poid 33)&…...
【含文档+PPT+源码】基于SpringBoot+vue的疫苗接种系统的设计与实现
项目介绍 本课程演示的是一款 基于SpringBootvue的疫苗接种系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系…...
解决 Dart Sass 的旧 JS API 弃用警告 的详细步骤和解决方案
以下是解决 Dart Sass 的旧 JS API 弃用警告 的详细步骤和解决方案: 错误原因 Dart Sass 1.x 版本中使用的旧 JavaScript API(如 sass.render() 或 sass.compile() 的旧调用方式)将在 2.0.0 版本中被移除。需迁移到新 API 以避免未来报错。…...
Concepts (C++20)
C20 Concepts Concepts 是 C20 引入的核心特性,用于显式约束模板参数,提升代码可读性和错误提示。以下通过代码示例和原理分步骤解析其用法。 1. 基本概念 目标:显式声明模板参数必须满足的条件。优势:替代复杂的 SFINAE 和 ena…...
CVE-2024-23897-Jenkins 2.441之前版本存在任意文件读取漏洞
1.漏洞介绍 Jenkins 2.441及更早版本,以及LTS 2.426.2及更早版本没有禁用其CLI命令解析器的一个功能,该功能会将参数中字符后跟的文件路径替换为该文件的内容,允许未经身份验证的攻击者读取Jenkins控制器文件系统上的任意文件。 2.poc利用 下…...
利用 SSE 实现文字吐字效果:技术与实践
利用 SSE 实现文字吐字效果:技术与实践 引言 在现代 Web 应用开发中,实时交互功能愈发重要。例如,在线聊天、实时数据监控、游戏中的实时更新等场景,都需要服务器能够及时将数据推送给客户端。传统的请求 - 响应模式在处理实时性要求较高的场景时显得力不从心,而 Server…...
离线部署kubernetes
麒麟Linux服务器 AMR架构 🧰 离线部署 Kubernetes v1.25.9(麒麟系统 Docker) 一、验证Docker部署状态 检查Docker服务运行状态 systemctl status docker 预期输出应显示 Active: active (running),表明服务已启动18。 …...
2024武汉邀请赛B.Countless Me
题目链接 #include<bits/stdc.h> using namespace std; using lllong long;int main() {ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);ll n; cin>>n;vector<ll>a(n1);ll res0;for(int i1;i<n;i) cin>>a[i],resa[i];ll ans0;for(int i32;i>…...
第53讲 农学科研中的AI伦理与可解释性——探索SHAP值、LIME等可解释工具与科研可信性建设之道
目录 一、为什么农学科研中需要“可解释AI”? ✅ 场景示例: 二、常见可解释AI工具介绍 1. SHAP(SHapley Additive exPlanations) 2. LIME(Local Interpretable Model-agnostic Explanations) 三、AI伦理问题在农学中的体现 🧭 公平性与偏见 🔐 数据隐私 🤖…...
《Python3网络爬虫开发实战(第二版)》配套案例 spa6
Scrape | Moviehttps://spa6.scrape.center/ 请求影片列表api时,不仅有分页参数,还多了一个token,通过重发请求发现token有时间限制,所以得逆向token的生成代码。 通过xhr断点定位到接口请求位置 刷新页面或者点翻页按钮&#x…...
面试题:Java程序CPU 100%问题排查指南
Java程序CPU 100%问题排查指南 当Java程序出现CPU使用率达到100%的情况时,通常意味着程序存在性能瓶颈或无限循环等问题。以下是系统化的排查方法和解决方案: 1. 快速定位问题线程 使用top命令初步定位 top -H -p <java_pid> # 查看Java进程的所有线程CPU占用线程…...
YOLOv12的注意力机制革新与实时检测性能分析——基于架构优化与历史版本对比
目录 一、摘要 二、引言 三、YOLO架构的技术演变 四、YOLOv12的架构设计 主干网特征提取 头部特征融合和目标检测 五、YOLOv12的架构创新 区域注意力模块 残差高效层聚合网络(R-ELAN) 其他改进和效率提升 六、YOLOv12 的基准评估 延迟与精度…...
Ollama工具调用(Tool Calls)业务应用案例
场景:电商客服自动处理退货请求 业务需求:用户通过聊天界面申请退货,模型需调用外部工具验证订单状态、触发退货流程,并返回处理结果。 1. 定义工具列表 在请求中声明模型可调用的工具(函数)及其参数格式…...
输入捕获模式测频率
前提工作: PA6、PA0通过跳线相连,PA6测试PA0的输出频率 本来只有下列函数,改变占空比 但是我们需要测试频率,需要动态改变频率。 void PWM_SetCompare1(uint16_t Compare) {TIM_SetCompare1(TIM2, Compare); //设置CCR1的值 }…...
【Vue3 实战】插槽封装与懒加载
一、为什么需要插槽?从一个面板组件说起 在电商首页开发中,经常遇到这样的场景: 「新鲜好物」「人气推荐」同样类型模块都需要相同的标题栏,但内容区布局不同 这时候,插槽(Slot)就像一个「内容…...
Matlab 复合多层结构的隔声研究
应用转移矩阵的方法,就平面声波垂直入射的情况,对具有周期结构的无限大多层板的隔声特性进行了理论分析,并对结构不同的多层板的隔声特性进行了数值模拟.理论分析和数值模拟表明:与通常隔声用的单层或双层板相比,在保持面密度不变的条件下,采用多层板结构能够在某些…...
vulkanscenegraph显示倾斜模型(6)-帧循环
前言 上一部分,通过十个章节的内容,对视景器的初始化与准备工作进行了系统性的剖析。本章将在该基础上,探讨vsg中的帧循环机制,主要包含前进到下一帧、事件处理、更新、记录与提交、呈现五个部分,同时整个过程包含了复…...
k8s 1.26版部署
环境规划: pod网段:10.244.0.0/16 service网段:10.10.0.0/16 注意: pod和service网段不可冲突,如果冲突会导致K8S集群安装失败。 容器运行时本次使用containerd。 主机规划: 一、初始化系统(所有节点) 1. 主机名定义以及解析 2. 关闭防火墙 3. 关闭selinux 4. 时间同…...
Android之AI自动化测试--Midscene
文章目录 前言一、准备工作1.安装2.准备 API Key3.安装 adb4.连接设备 二、yaml格式自动化脚本1. 脚本案例2.执行结果 三、文件结构变化android 部分 前言 字节 Web Infra团队官宣Midscene 从 v0.15 开始支持 Android 自动化测试,本篇文章介绍yaml方式的Android自动…...
Cadence 建立复合原理图封装时怎么切换页面
1.在当前页面A绘制完成,若要切换到下一页面B。怎么操作呢? 见下面: CTRLN,切换到下一部分(CTRLB,切换到前一部分)继续放线以及管脚 即:此时在原理图库的A部分 此时按 CTRLN,切换到下一B部分...
Sharding-JDBC 系列专题 - 第八篇:数据治理与高级功能
Sharding-JDBC 系列专题 - 第八篇:数据治理与高级功能 本系列专题旨在帮助开发者全面掌握 Sharding-JDBC,一个轻量级的分布式数据库中间件。本篇作为系列的第八篇文章,将重点探讨 数据治理(Data Governance) 和 高级功能,包括数据加密、影子表、SQL 审计以及 ShardingSp…...
今日行情明日机会——20250424
指数依然是震荡走势,接下来两天调整的概率较大 2025年4月24日涨停主要行业方向分析 一、主要方向 化工(新能源材料) • 涨停家数:8家(最强方向)。 • 代表标的: ◦ 中欣氟材(3连板…...
Kubernetes 常用运维命令整理
目录 Kubernetes 常用运维命令整理一、集群管理二、Pod 和容器管理三、Deployment 和应用管理四、Service 和网络管理五、存储管理六、ConfigMap 和 Secret 管理七、资源使用与监控八、调度和容错九、Role 和权限管理十、清理资源 总结 Kubernetes 常用运维命令整理 Kubernete…...
【Python爬虫基础篇】--4.Selenium入门详细教程
先解释:Selenium:n.硒;硒元素 目录 1.Selenium--简介 2.Selenium--原理 3.Selenium--环境搭建 4.Selenium--简单案例 5.Selenium--定位方式 6.Selenium--常用方法 6.1.控制操作 6.2.鼠标操作 6.3.键盘操作 6.4.获取断言信息 6.5.…...
基于Vulkan Specialization Constants的材质变体系统
材质变体 所谓材质变体,指的是一份材质代码文件,最终对应的是多份运行时gpu程序。比如,shader代码里面有开关或者选项,不同的组合对应不同的最终gpu program。那么,所有的这些组合对应的gpu program,可以统…...
Langchain+RAG+向量数据库
加载数据 import osimport lancedb from langchain_community.document_loaders import TextLoader from langchain_community.embeddings import BaichuanTextEmbeddings from langchain_community.vectorstores import LanceDB from langchain_core.output_parsers import St…...
Stack和Queue和deque的讲解(底层实现 手撕版)
一.底层的基本思路 我们cpp中实现的栈和队列不同于我们数据结构c语言实现的栈和队列,c语言中实现的栈和队列都是通过一个数组指针的形式来完成,每个函数都需要写大量的代码,但是我们的cpp,就是通过函数模板 适配器来完成的。 我们…...
《Pinia 从入门到精通》Vue 3 官方状态管理 -- 插件扩展篇
使用插件扩展功能 可以同时使用多个插件(插件“中间件式”机制)一、使用多个插件的方式二、插件机制简图三、插件互不冲突的关键点四、实战示例:多插件组合使用五、组合使用注意事项推荐插件组合搭配方案(实战模板) 根…...
JavaScript 中的 Reflect 对象:深入理解与应用
JavaScript 中的 Reflect 对象:深入理解与应用 一、引言 在 JavaScript 不断发展的过程中,ES6 引入了许多新的特性和对象,其中 Reflect 对象是一个强大且实用的工具。Reflect 对象提供了一系列静态方法,这些方法与 Proxy 对象的…...
dirsearch 使用教程:详细指南与配置解析
dirsearch 是一款强大的开源命令行工具,用于对 Web 服务器进行目录和文件暴力破解。它通过扫描目标网站,尝试发现隐藏的目录、文件或潜在的敏感资源,广泛应用于渗透测试和安全审计。dirsearch 提供丰富的选项和灵活的配置文件支持,…...
【C++基础知识】C++类型特征组合:`disjunction_v` 和 `conjunction_v` 深度解析
这两个模板是C17引入的类型特征组合工具,用于构建更复杂的类型判断逻辑。下面我将从技术实现到实际应用进行全面剖析: 一、基本概念与C引入版本 1. std::disjunction_v (逻辑OR) 引入版本:C17功能:对多个类型特征进行逻辑或运算…...
ctfhow——web入门214~218(时间盲注开始)
web入门214 #another:uwvwko import requestsurlhttp://b0c11589-31c9-4bf9-8b66-6b5a1fc08726.challenge.ctf.show/api/index.php flag str{-_1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM}for i in range(1,50):for j in str:# 查数据库# payload "…...
shell练习(2)
1.给脚本service.sh进行修改,当执行的时候要求输入(1、2、3、4、5)时安装对应的httpd、vim、wget、更换aliyum等功能,当输入错误 时提示应该输入正确的值但是不会退出。 [rootbogon yy]# cat service.sh #!/bin/bash while : do cat <<-EOF --------------…...
【GO语言小案例手记】基于GIN的简易代理网关
基于GIN的简易代理网关 背景目标开工依赖主体代码配置文件 后记 背景 正好最近对GO也有点兴趣,搞个小项目练练手。 目标 网关需要能够根据路由自动映射到服务支持轮询、加权轮询、随机轮询三种算法简单好理解好使用,最好一个配置文件就能跑起来网关本…...
Qt 入门 6 之布局管理
Qt 入门 6 之布局管理 对于一个完整的软件,布局管理时必不可少的。其会让界面中嗯嗯部件呈现一个整齐的排列,也可令其大小随着窗口界面的大小变换而变化Qt 主要提供了QLayout 类及其子类作为布局管理器,他们可以实现常用的布局管理功能&…...
Java技术体系的主要产品线详解
Java技术体系的主要产品线详解 Java Card:支持Java小程序(Applets)运行在小内存设备(如智能卡)上的平台。 Java ME(Micro Edition):支持Java程序运行在移动终端(手机、P…...