第38周:文献阅读
目录
摘要
Abstract
文献阅读
问题引入
研究背景
研究意义
研究目的
相关工作
自回归循环网络
基于 GAN 的序列生成方法
时间序列表示学习
创新点
提出模型
基本原理
代码实现
实验研究
实验1——基准和评估
实验2——不同类型的时间序列数据
实验3——增益来源分析对比
总结
摘要
TimeGAN在结构上由嵌入网络、恢复网络、生成网络和判别网络构成,通过结合对抗学习和最大似然估计,将序列级目标分解为逐步目标进行训练。其特点在于兼顾无监督GAN的灵活性与自回归模型有监督训练的可控性,能有效捕捉时间序列的动态特性。优势体现在相比传统方法,在生成时间序列数据时,能更好地平衡多样性和保真度。它可应用于金融市场预测、医疗健康监测、工业过程监控等领域,用于生成合成数据以辅助模型训练、数据增强等任务。原因是传统方法在处理时间序列生成时,难以有效捕捉复杂时间相关性和生成高质量数据。实验表明,在多样性、保真度和实用性等评估指标上,TimeGAN效果显著优于现有基准方法。未来可在进一步提升模型对长序列和高维复杂时间序列的处理能力、优化模型训练效率等方面进行改进 。
Abstract
TimeGAN consists of an embedding network, a recovery network, a generative network, and a discriminative network in structure. By combining adversarial learning and maximum likelihood estimation, sequence level targets are decomposed into stepwise targets for training. Its characteristic lies in balancing the flexibility of unsupervised GAN with the controllability of supervised training of autoregressive models, which can effectively capture the dynamic characteristics of time series. The advantage lies in the ability to better balance diversity and fidelity when generating time series data compared to traditional methods. It can be applied in fields such as financial market forecasting, healthcare monitoring, industrial process monitoring, etc., to generate synthetic data to assist in tasks such as model training and data augmentation. The reason is that traditional methods are difficult to effectively capture complex temporal correlations and generate high-quality data when processing time series generation. Experiments have shown that TimeGAN outperforms existing benchmark methods significantly in evaluation metrics such as diversity, fidelity, and practicality. In the future, improvements can be made in enhancing the model's ability to handle long and high-dimensional complex time series, optimizing model training efficiency, and other aspects.
文献阅读
title:Time-series Generative Adversarial Networks
Time-series Generative Adversarial Networks
问题引入
研究背景
时间序列数据的生成建模面临独特挑战,不仅要捕捉每个时间点的特征分布,还需把握变量跨时间的复杂动态。现有研究主要分为两类:一类聚焦于改进自回归模型的时间动态以用于序列预测,但该方法本质上是确定性的,无法真正从模型中随机采样生成新序列;另一类直接将生成对抗网络框架应用于序列数据,然而仅依赖对抗反馈可能无法有效捕捉训练数据中的时间相关性。
研究意义
提出的时间序列生成对抗网络(TimeGAN)框架结合了无监督 GAN 框架的灵活性和自回归模型中有监督训练的可控性,为生成逼真的时间序列数据提供了新途径。实验表明,该框架在生成高质量时间序列数据方面显著优于现有基准方法,在多样性、保真度和实用性等评估指标上表现出色36。
研究目的
旨在利用训练数据学习一个能最佳逼近真实数据分布的密度函数。通过将序列级目标分解为一系列逐步目标,结合 GAN 目标和最大似然目标,训练包含嵌入函数、恢复函数、序列生成器和序列判别器的 TimeGAN 模型,生成在时间动态上与原始数据相似的时间序列数据,并通过实验验证模型的有效性45。
相关工作
自回归循环网络
通过最大似然原理训练的自回归循环网络在多步采样时易出现较大预测误差。为此提出了诸如 Scheduled Sampling、Professor Forcing、Actor-critic 等方法。这些方法虽考虑了逐步转移动态,但本质是确定性的,无法从学习分布中显式采样,与生成合成数据的目标不符1。
基于 GAN 的序列生成方法
多项研究直接在时间序列设置中应用 GAN 框架,如 C-RNN-GAN 直接将 GAN 架构应用于序列数据,RCGAN 在此基础上进行了一些架构调整,还有研究通过添加时间戳信息处理不规则采样。然而,这些方法仅依赖二元对抗反馈进行学习,不足以保证网络有效捕捉训练数据中的时间动态。
时间序列表示学习
主要关注学习紧凑编码以利于下游任务,如预测、分类等,也有研究探索学习潜在表示用于预训练、解耦和可解释性等。在静态设置中,有研究将自动编码器与对抗训练相结合,以学习相似性度量、实现高效推理和提高生成能力,而 TimeGAN 可推广到任意时间序列数据,在每个时间步引入随机性,并使用嵌入网络学习数据的逐步分布和潜在动态。
创新点
构建了包含嵌入函数、恢复函数、序列生成器和序列判别器的 TimeGAN 框架,将无监督 GAN 框架的灵活性与自回归模型中有监督训练的可控性相结合,有效捕捉时间序列数据的时间动态。
提出模型
基本原理
下图是嵌入函数和恢复函数如何在原始特征空间和隐空间中的实现过程:
通过不同损失函数对各网络组件的参数进行梯度更新,使得嵌入网络能有效提取特征,恢复网络能准确重建数据,生成网络能骗过判别网络,判别网络能准确区分真实与生成数据,最终使整个 TimeGAN 模型能够生成高质量的时间序列数据。
代码实现
嵌入函数
Embedder 函数在 TimeGAN 模型中负责将原始特征空间映射到潜在空间
def embedder (X, T):"""Args:- X: 输入的时间序列特征- T: 输入的时间信息Returns:- H: 输出对应的嵌入特征空间"""with tf.variable_scope("embedder", reuse = tf.AUTO_REUSE): #创建一个变量作用域,名为embeddere_cell = tf.nn.rnn_cell.MultiRNNCell([rnn_cell(module_name, hidden_dim) for _ in range(num_layers)]) #创建一个RNN单元,并将多个RNN单元堆叠在一起e_outputs, e_last_states = tf.nn.dynamic_rnn(e_cell, X, dtype=tf.float32, sequence_length = T) #运行动态的RNN,返回每个时间步的输出结果和最后一个时间步的隐藏状态H = tf.contrib.layers.fully_connected(e_outputs, hidden_dim, activation_fn=tf.nn.sigmoid) #全连接层处理,输入是动态RNN的输出结果,最后对输出进行非线性变化 return H
创建一个变量作用域,名为embedder,该作用域包含以下三个步骤:
step1 创建一个RNN单元,并将多个RNN单元堆叠在一起
step2 运行动态的RNN,返回每个时间步的输出结果和最后一个时间步的隐藏状态
step3 全连接层处理,输入是动态RNN的输出结果,最后对输出进行非线性变化
这个嵌入表示将在后续的模型中用于恢复原始数据、生成合成数据以及进行判别等操作。
恢复函数
Recovery函数是 TimeGAN 模型中主要负责将潜在空间中的表示恢复到原始特征空间。
def recovery (H, T): """Args:- H: 隐空间表示- T: 输入的时间信息Returns: - X_tilde: 恢复到原始特征空间的数据""" with tf.variable_scope("recovery", reuse = tf.AUTO_REUSE): #创建作用域,名为recovery r_cell = tf.nn.rnn_cell.MultiRNNCell([rnn_cell(module_name, hidden_dim) for _ in range(num_layers)]) #创建RNN单元,并堆叠多个RNN单元在一起r_outputs, r_last_states = tf.nn.dynamic_rnn(r_cell, H, dtype=tf.float32, sequence_length = T) #运行动态RNNX_tilde = tf.contrib.layers.fully_connected(r_outputs, dim, activation_fn=tf.nn.sigmoid) #全连接层处理return X_tilde
同样,也需要先创建一个作用域,该作用域recovery同样有三个步骤:创建RNN——运行RNN——全连接层
序列生成器
#生成器网络定义
def generator (Z, T): """Args:- Z: 随机变量- T: 输入的时间序列信息Returns:- E: generated embedding""" with tf.variable_scope("generator", reuse = tf.AUTO_REUSE):e_cell = tf.nn.rnn_cell.MultiRNNCell([rnn_cell(module_name, hidden_dim) for _ in range(num_layers)])e_outputs, e_last_states = tf.nn.dynamic_rnn(e_cell, Z, dtype=tf.float32, sequence_length = T)E = tf.contrib.layers.fully_connected(e_outputs, hidden_dim, activation_fn=tf.nn.sigmoid) return E
#监督器网络的定义
def supervisor (H, T): """Args:- H: 隐空间表示- T: 输入的时间序列信息Returns:- S: 基于生成器生成的潜在表示生成序列""" with tf.variable_scope("supervisor", reuse = tf.AUTO_REUSE):e_cell = tf.nn.rnn_cell.MultiRNNCell([rnn_cell(module_name, hidden_dim) for _ in range(num_layers-1)])e_outputs, e_last_states = tf.nn.dynamic_rnn(e_cell, H, dtype=tf.float32, sequence_length = T)S = tf.contrib.layers.fully_connected(e_outputs, hidden_dim, activation_fn=tf.nn.sigmoid) return S
#生成器在整个模型中的使用
E_hat = generator(Z, T) #生成潜在空间嵌入
H_hat = supervisor(E_hat, T) #基于生成器生成的嵌入 E_hat 生成的序列
H_hat_supervise = supervisor(H, T) #基于真实数据的嵌入 H 生成的序列X_hat = recovery(H_hat, T) #恢复到原始空间#生成器的损失函数
# 1. 对抗损失
G_loss_U = tf.losses.sigmoid_cross_entropy(tf.ones_like(Y_fake), Y_fake)
G_loss_U_e = tf.losses.sigmoid_cross_entropy(tf.ones_like(Y_fake_e), Y_fake_e)# 2. 监督损失
G_loss_S = tf.losses.mean_squared_error(H[:,1:,:], H_hat_supervise[:,:-1,:])# 3. 短匹配损失
G_loss_V1 = tf.reduce_mean(tf.abs(tf.sqrt(tf.nn.moments(X_hat,[0])[1] + 1e-6) - tf.sqrt(tf.nn.moments(X,[0])[1] + 1e-6)))
G_loss_V2 = tf.reduce_mean(tf.abs((tf.nn.moments(X_hat,[0])[0]) - (tf.nn.moments(X,[0])[0])))G_loss_V = G_loss_V1 + G_loss_V2# 4. 总损失
G_loss = G_loss_U + gamma * G_loss_U_e + 100 * tf.sqrt(G_loss_S) + 100*G_loss_V #生成器的训练过程
G_solver = tf.train.AdamOptimizer().minimize(G_loss, var_list = g_vars + s_vars) #优化器对总损失进行最小化
GS_solver = tf.train.AdamOptimizer().minimize(G_loss_S, var_list = g_vars + s_vars) #优化器对监督损失进行最小化
生成器的训练全过程有以下几个步骤:
step1 定义生成器网络和监督器网络:多个RNN堆叠——运行RNN——全连接层处理
step2 生成器在TimeGAN模型中的使用:转换为latent space embedding——supervisor——recover feature space
step3 生成器的损失函数:对抗损失+监督损失+短匹配损失
step4 生成器的优化
Encode,Generate and Iterate
序列判别器
#判别器的定义
def discriminator (H, T):"""Args:- H: 隐空间表示- T: 输入的时间序列的信息Returns:- Y_hat: 原始数据和合成的时间序列的分类""" with tf.variable_scope("discriminator", reuse = tf.AUTO_REUSE): #定义变量作用域d_cell = tf.nn.rnn_cell.MultiRNNCell([rnn_cell(module_name, hidden_dim) for _ in range(num_layers)])d_outputs, d_last_states = tf.nn.dynamic_rnn(d_cell, H, dtype=tf.float32, sequence_length = T)Y_hat = tf.contrib.layers.fully_connected(d_outputs, 1, activation_fn=None) return Y_hat #判别器的输入数据
Y_fake = discriminator(H_hat, T) #对生成器生成的潜在表示 H_hat 进行判别的结果
Y_real = discriminator(H, T) #对真实数据经过嵌入网络得到的潜在表示 H 进行判别
Y_fake_e = discriminator(E_hat, T)#对生成器直接生成的潜在嵌入 E_hat 进行判别#判别器的损失函数
D_loss_real = tf.losses.sigmoid_cross_entropy(tf.ones_like(Y_real), Y_real) #判别真实数据
D_loss_fake = tf.losses.sigmoid_cross_entropy(tf.zeros_like(Y_fake), Y_fake) #判别生成数据
D_loss_fake_e = tf.losses.sigmoid_cross_entropy(tf.zeros_like(Y_fake_e), Y_fake_e) #判别生成器直接生成的潜在嵌入
D_loss = D_loss_real + D_loss_fake + gamma * D_loss_fake_e#判别器的训练
# Joint Training
print('Start Joint Training')for itt in range(iterations):# Generator training (twice more than discriminator training)for kk in range(2):# ... 生成器和嵌入器的训练代码 ...# Discriminator training # Set mini-batchX_mb, T_mb = batch_generator(ori_data, ori_time, batch_size) # Random vector generationZ_mb = random_generator(batch_size, z_dim, T_mb, max_seq_len)# Check discriminator loss before updatingcheck_d_loss = sess.run(D_loss, feed_dict={X: X_mb, T: T_mb, Z: Z_mb})# Train discriminator (only when the discriminator does not work well)if (check_d_loss > 0.15): _, step_d_loss = sess.run([D_solver, D_loss], feed_dict={X: X_mb, T: T_mb, Z: Z_mb})# Print multiple checkpointsif itt % 1000 == 0:print('step: '+ str(itt) + '/' + str(iterations) + ', d_loss: ' + str(np.round(step_d_loss,4)) + ', g_loss_u: ' + str(np.round(step_g_loss_u,4)) + ', g_loss_s: ' + str(np.round(np.sqrt(step_g_loss_s),4)) + ', g_loss_v: ' + str(np.round(step_g_loss_v,4)) + ', e_loss_t0: ' + str(np.round(np.sqrt(step_e_loss_t0),4)) )
print('Finish Joint Training')
判别器的训练全过程有以下几个步骤:
step1 判别器的定义(同生成器)
step2 判别器在TimeGAN模型中的使用
step3 判别器的损失:真实数据判别损失+合成数据判别损失+生成器直接生成的潜在嵌入判别损失
step4 判别器的训练
运行结果
“stock”数据集
可视化结果
得分结果
本周只进行了一个数据集的TimeGAN的代码实践,后续会将原论文中的其他数据集放入模型中得出结果进行对比,并且会将TimeGAN模型与其他前沿模型的不同数据集上的运行效果进行对比,以及不同数据集的自回归性能对比。
实验研究
该实验研究中,采用t-SNE和PCA可视化方法和得分对比(判别得分、预测得分)的方法,用来衡量不同模型或者不同参数设置的结果性能对比。
实验1——基准和评估
得分对比
对比分析:
在鉴别分数和预测分数方面,TimeGAN始终生成比基准生成更高质量的综合数据
实验2——不同类型的时间序列数据
可视化
对比分析:
与TimeGAN生成的合成数据集相比,使用t-SNE进行可视化的其他基准数据集与原始数据的重叠明显更好
得分对比
对比分析:
观察到TimeGAN的预测分数几乎与原始数据集本身的预测分数相同。
实验3——增益来源分析对比
得分对比
对比分析:
1、当数据具有高时间相关性的特征时,监督损失起着特别重要的作用
2、嵌入网络和与对抗性网络的联合训练(从而对齐两者的目标)清晰且持续地全面提高了生成性能
总结
在本文中,介绍了TimeGAN,一个新的时间序列生成框架,它结合了无监督GAN方法的通用性和由监督自回归模型提供的对条件时间动力学的控制。利用监督损失和联合训练的嵌入网络的贡献,TimeGAN在生成真实的时间序列数据方面展示了与最先进的基准测试相比的一致和显著的改进。在未来,进一步的工作可能会研究将差异隐私框架纳入TimeGAN方法,以生成具有差异隐私保证的高质量时间序列数据。
本周主要是对TimeGAN的原理进行理解,以及逐行学习了TimeGAN的代码实现,最终选择了一个数据集进行了代码实践,接下来会继续阅读有关TimeGAN的相关文献,以及代码实现该文献中的基准测试部分。
相关文章:
第38周:文献阅读
目录 摘要 Abstract 文献阅读 问题引入 研究背景 研究意义 研究目的 相关工作 自回归循环网络 基于 GAN 的序列生成方法 时间序列表示学习 创新点 提出模型 基本原理 代码实现 实验研究 实验1——基准和评估 实验2——不同类型的时间序列数据 实验3——…...
CD19.【C++ Dev】类和对象(10) 日期类对象的成员函数(日期+天数)
目录 日期天数 需要考虑的几个问题 1.天数加在日上,有可能会溢出,需要进位 2.对月进位,也有可能导致月会溢出,需要进位 3.对年进位,需要考虑是否为闰年 代码设计 取得指定月的天数GetMonthDay函数 方法1:if判断或switch/case 方法2:查表 版本1 版本2 operator 初始…...
Linux安装MySQL数据库并使用C语言进行数据库开发
目录 一、前言 二、安装VMware运行Ubuntu 1.安装VMware 2.使用VMware打开Ubuntu 三、配置VMware使用网卡 1.添加NAT网卡 四、Linux下安装MySQL数据库 五、安装MySQL开发库 六、演示代码 sql_connect.c sql_connect.h main.c中数据库相关代码 结尾 一、前言 由于最…...
GStreamer —— 3.1、Qt+GStreamer制作多功能播放器,支持本地mp4文件、rtsp流、usb摄像头等(可跨平台,附源码)
🔔 GStreamer 相关音视频技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 运行效果...
如何在根据名称或id找到json里的节点以及对应的所有的父节点?
函数如下: 数据如下: [{ "name": "数据看板", "id": "data", "pageName": "tableeauData", "list": [] }, { "name": "审计模块", "id": &quo…...
IP第一次笔记
一、TCP协议 第0步:如果浏览器和host文件存在域名对应的P地址记录关系 则直接封装HTTP数据报文,如果没有记录则触发DNS解析获 取目标域名对应的P地址 第一步:终端主机想服务器发起TCP三次握手 1.TCP的三次握手 2.传输网页数据 HTTP --应用层…...
手机硬件检测详解:从版本信息到相机功能的全面指南
手机硬件检测概述 接下来,我们将为您提供一份详尽的手机硬件检测指南,涵盖三十项关键内容,助您轻松掌握手机硬件的检测技巧。对于开发者而言,在测试手机硬件性能时,可以结合使用克魔开发助手(Keymob&#…...
大数据学习(86)-Zookeeper去中心化调度
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...
05-SpringBoot3入门-整合SpringMVC(配置静态资源、拦截器)
1、说明 在01-SpringBoot3入门-第一个项目-CSDN博客中,其实就已经整合了SpringMVC。下面讲解怎么配置静态资源和拦截器 2、配置静态资源 命名:static(文件夹) 位置:src/main/resources 编写一个html文件 访问 http:/…...
大数据学习(88)-zookeeper实现的高可用(HA)
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...
自然语言处理(5)—— 中文分词
中文分词的基本原理及实现 1. 什么是词2. 基本原理3. 发展趋势:多数场景无需显式分词 信息处理的目标是使用计算机能够理解和产生自然语言。而自然语言理解和产生的前提是对语言能够做出全面的解析。 汉语词汇是语言中能够独立运用的最小的语言单位,是语…...
MP4音视频格式
1.MP4 MP4是一种用于封装音视频/字幕/图片/章节信息等数据的多媒体容器格式,是MPEG-4系列的成员之一 2.文件结构 MP4由一层层的嵌套Box(atom)组成 [ size (4 bytes) ][ type (4 bytes)][ payload (嵌套box或者数据) ] 3.常见Box 类型名称…...
NO.59十六届蓝桥杯备战|基础算法-前缀和|一维前缀和|最大子段和|二维前缀和|激光炸弹(C++)
前缀和与差分的核⼼思想是预处理,可以在暴⼒枚举的过程中,快速给出查询的结果,从⽽优化时间复杂度。 是经典的⽤空间替换时间的做法 前缀和 解法1:暴力模拟,q有几次,就套几次for循环 解法2:前…...
Node.js 模块加载机制--详解
目录 Node.js 模块加载机制详解 1. 什么是模块? 2. 模块加载顺序 3. 核心模块加载 4. 自定义模块加载 5. 目录作为模块(index.js) 6. require.resolve() 查找模块路径 7. module 对象解析 8. require.cache 机制(避免重复…...
Live555+Windows+MSys2 编译Androidso库和运行使用(三,实战篇)
文章目录 先上效果图VLC中打开日志权限cmakelist 和gradle建议直接去git查看源代码ui下一篇视频预览和采集 先上效果图 VLC中打开 日志 com.mq.qrtspclient E mystream stream, from the file /storage/emulated/0/Android/data/com.mq.qrtspclient/files/…...
验证码通过“Canvas 绘制”与“Base64 图片”渲染两种不同的实现方式显示
文章目录 🎉验证码通过“Canvas 绘制”与“Base64 图片”渲染两种不同的实现方式显示一、Canvas 绘制:接口回调“字符串”通过绘制的方式显示到前端✨1、前端代码(Canvas 绘制):包含验证码区域、绘制验证码方法&#x…...
FALL靶场通关攻略
1,下载好靶机后打开,通过kali扫描靶机ip和端口,得到靶机ip为192.168.50.144 2,扫描目录 3,访问靶机 4,访问扫描到的test.php,得到缺少GET请求参数的提示 5,使用FUZZ来扫出参数为file 6ÿ…...
(学习总结31)Linux 进程地址空间与进程控制
Linux 进程地址空间与进程控制 进程地址空间Linux 进程地址空间分布虚拟地址空间和页表创建子进程与写时拷贝权限访问缺页中断 Linux 虚拟内存管理mm_struct 内存描述符区域划分vm_area_struct 独立虚拟内存区域 虚拟地址空间的作用 进程控制进程创建fork 函数介绍写时拷贝作用…...
基于Springboot的网上订餐系统 【源码】+【PPT】+【开题报告】+【论文】
网上订餐系统是一个基于Java语言和Spring Boot框架开发的Web应用,旨在为用户和管理员提供一个便捷的订餐平台。该系统通过简化餐饮订购和管理流程,为用户提供快速、高效的在线订餐体验,同时也为管理员提供完善的后台管理功能,帮助…...
Axure设计之中继器表格——拖动行排序教程(中继器)
一、原理介绍 在Axure中实现表格行的拖动排序,主要依赖于中继器的排序事件。然而要实现拖动效果,就必须结合动态面板,因为动态面板可以设置拖动事件,之所以使用动态面板或许是因为它可以更灵活地处理位置变化。用户拖动行时&…...
GAUSSDB 分布式存储机制深度解析
GAUSSDB 分布式存储机制深度解析 一、核心机制概览 GAUSSDB 的分布式存储通过 数据分片、多副本管理 和 全局事务控制 实现高可用与水平扩展。以下为关键机制详解: 二、数据分片(Sharding) 1. 分片策略 GAUSSDB 支持多种分片规则ÿ…...
【NLP 46、大模型技术发展】
目录 一、ELMo 2018 训练目标 二、GPT-1 2018 训练目标 三、BERT 2018 训练目标 四、Ernie —— baidu 2019 五、Ernie —— Tsinghua 2019 六、GPT-2 2019 七、UNILM 2019 八、Transformer - XL & XLNet 2019 1.模型结构 Ⅰ、循环机制 Recurrence Mechanism Ⅱ、相对位置…...
汽车加气站操作工证书报考条件是什么?
关于汽车加气站操作工的资格证书: 一、核心证书要求 CNG充装人员上岗证 这是加气站加气工的核心资质证书,需通过专业培训并考核。该证书由相关部门颁发,证明持证人具备从事CNG(压缩天然气)充装操作的专业技能…...
材质及制作笔记
基本流程: 建中模——zb雕刻高模——maya拓扑低模——拆uv——sp烘焙贴图——sp绘制材质——渲染 1 材质贴图: diffuse/albedo/basecolor:漫反射 reflection/specular:反射 metalness:金属度 glossiness…...
Opencv 图像读取与保存问题
本文仅对 Opencv图像读取与保存进行阐述,重在探讨图像读取与保存过程中应注意的细节问题。 1 图像读取 首先看一下,imread函数的声明: // C: Mat based Mat imread(const string& filename, int flags1 );// C: IplImage based IplImage*…...
Flutter 2025生态全景:从跨端到嵌入式开发的新机遇
一、技术演进:从"一次编写多端运行"到"全场景覆盖" 1.1 渲染引擎革命:Impeller 2.0的性能突破 // 启用Impeller的配置示例(android/app/build.gradle) def enableImpeller true android {defaultConfig {…...
Idea中诡异的文件编码问题: 设置fileCodeing为UTF8但不生效
在fileCoding配置了编码utf-8,右下角的文件里编码格式却是ISO-8859-1,git后到远程仓库里却是ISO-8859-1的乱码,怎么修改都不生效,重启也不行,恶心的不行。 最后发现修复方案是: 1. 先随便做个变更&#x…...
Linux中逻辑卷的使用、扩容与磁盘配额
目录 一.逻辑卷概述 1.普通分区的优缺点 2.逻辑卷的优点 3.逻辑卷概述 二.逻辑卷的创建 1.逻辑卷相关命令 2.创建步骤 三.逻辑卷的扩容 1.扩容步骤 四.磁盘配额 1.概念及注意点 2.使用条件 3.相关命令 一.逻辑卷概述 1.普通分区的优缺点 普通分区优点:…...
Java版Manus实现来了,Spring AI Alibaba发布开源OpenManus实现
此次官方发布的 Spring AI Alibaba OpenManus 实现,包含完整的多智能体任务规划、思考与执行流程,可以让开发者体验 Java 版本的多智能体效果。它能够根据用户的问题进行分析,操作浏览器,执行代码等来完成复杂任务等。 项目源码及…...
关于IP免实名的那些事
IP技术已成为个人与企业保护隐私、提升网络效率的重要工具。其核心原理是通过中介服务器转发用户请求,隐藏真实IP地址,从而实现匿名访问、突破地域限制等目标。而“免实名”代理IP的出现,进一步简化了使用流程,用户无需提交身份信…...
从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.3实战案例:在笔记本电脑上运行轻量级LLM
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 实战案例:在笔记本电脑上运行轻量级LLM2.2.3 模型架构设计与实现1. 环境与工具准备1.1 硬件要求1.2 软件栈选择2. 轻量级模型架构设计2.1 模型参数配置2.2 关键技术优化3. 实战流程3.1 数据准备流程3.2…...
Labview信号分析系统(含报告)
1.摘要 本文详细介绍了基于LabVIEW的轴承故障信号分析系统的设计与实现。该系统以凯斯西储大学轴承驱动端的振动信号为研究对象,涵盖了正常信号以及内圈、滚珠、外圈三种故障信号的分析。系统可以对信号进行滤波、时域分析、频域分析和时频域分析等。系统的功能如下…...
基于FastAPI与Kimi AI的智能聊天应用开发实践
一、项目概述 本文介绍一个基于现代Web技术栈的智能对话系统,前端采用响应式设计实现聊天界面,后端通过FastAPI框架构建高性能API服务,集成Moonshot AI大语言模型实现智能对话功能。系统具备完整的消息交互流程,支持参数定制化配…...
Android 蓝牙/Wi-Fi通信协议之:经典蓝牙(BT 2.1/3.0+)介绍
在 Android 开发中,经典蓝牙(BT 2.1/3.0)支持多种协议,其中 RFCOMM/SPP(串口通信)、A2DP(音频流传输)和 HFP(免提通话)是最常用的。以下是它们在 Android 中的…...
介绍FRAMES:一个统一的检索增强生成评估框架
引言 大型语言模型(LLMs)在认知任务上取得了显著进步,检索增强生成(RAG)技术成为提升模型性能的重要方法。然而,现有的评估方法往往孤立地测试模型的检索能力、事实性和推理能力,无法全面反映模…...
云钥科技多通道工业相机解决方案设计
项目应用场景分析与需求挑战 1. 应用场景 目标领域:工业自动化检测(如精密零件尺寸测量、表面缺陷检测)、3D立体视觉(如物体建模、位姿识别)、动态运动追踪(如高速生产线监控)等。 核心…...
微信小程序逆向开发
一.wxapkg文件 如何查看微信小程序包文件: 回退一级 点击进入这个目录 这个就是我们小程序对应的文件 .wxapkg概述 .wxapkg是微信小程序的包文件格式,且其具有独特的结构和加密方式。它不仅包含了小程序的源代码,还包括了图像和其他资源文…...
Debian ubuntu源
配置文件路径 /etc/apt/sources.list 阿里 deb http://mirrors.aliyun.com/ubuntu/ $(lsb_release -cs) main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ $(lsb_release -cs) main restricted universe multiverse deb http://mirrors.aliyun.…...
几个工作中常用的网站
1.思维导图流程图 在线版 ProcessOn思维导图流程图-在线画思维导图流程图_在线作图实时协作 2.编码转换及报文格式化 ESJSON在线工具首页(ES JSON在线工具) JSON在线解析格式化验证 - JSON.cn 3.AI助手 通义 - 你的个人AI助手 文心一言 谷灵AI,你的工作好帮手…...
《Apipost如何超越Postman与Apifox?SocketIO调试工具横评》
实时通信调试工具可能已「过时」!许多主流工具如Apifox不支持SocketIO协议,导致调试效率低下。而Apipost作为国产工具,原生支持SocketIO,提供自定义事件管理、连接状态可视化等功能,极大提升了实时通信开发的效率和准确…...
为什么要将项目部署到外部tomcat
一、是什么 指将你的Java Web应用程序(如WAR包)安装并运行在一个独立安装的、位于项目外部的Tomcat服务器上,而不是使用内嵌的或开发环境自带的服务器。 外部Tomcat 指独立安装的Tomcat服务器(如从Apache官网下载的Tomcat&#…...
小迪安全109-php模型动态调试,反序列化,变量覆盖,tp框架,原生pop链
案例一 原生代码变量覆盖,duomicms 变量覆盖是什么 这个时候为什么会输出xiaodi呢 就是因为$ab所以$$a$b 所以就让$bxiaodi 搞不到源码,看老师的学吧 这一般在web端页面是看不到,也不好发现,代码可以看关键字和函数 例如$$这…...
Python 练习项目:MBTI 命令行测试工具
在当今数字化的时代,心理测试工具越来越受到欢迎,它们帮助人们更好地了解自己,做出更明智的职业选择,甚至改善人际关系。MBTI(迈尔斯-布里格斯性格分类法)是其中一种广为人知的人格测试,通过评估个人在四个维度上的偏好(外向-内向、实感-直觉、理智-情感、判断-理解),…...
zynq7000 + ucos3 + lwip202_v1_2调试过程
1 现在裸机应用上验证lwip 跑起来可能会报错,看下面的链接解决 zynq 网卡Phy setup error问题 zynq 网卡Phy setup error问题-CSDN博客 2 ping同以后,在zynq上添加ucos系统 链接如下: ZYNQ移植uCOSIII_zynq ucos-CSDN博客 3 移植lwip协议…...
Oracle数据库数据编程SQL<2.2 DDL 视图、序列>
目录 一、Oracle 视图(Views) (一) Oracle 视图特点 (二)Oracle 视图创建语法 关键参数: (三)Oracle 视图类型 1、普通视图 2、连接视图(可更新) 3、对象视图 4…...
关于bug总结记录
1、vs中出现bug error C1083:无法打开文件 链接:vs中出现bug error C1083:无法打开文件_vs20151083错误解决方法-CSDN博客 2、 VS小技巧:系统却提示:示msvcp120.dll丢失 链接:VS小技巧:系统却提示:示msvc…...
ClickHouse与TiDB实操对比:从入门到实战的深度剖析
ClickHouse与TiDB实操对比:从入门到实战的深度剖析 宝子们,在当今数据驱动的时代,选择合适的数据库对于处理海量数据和支撑业务发展至关重要。ClickHouse和TiDB作为两款备受关注的数据库,各自有着独特的优势和适用场景。今天&…...
【测试开发】OKR 小程序端黑盒测试报告
【测试报告】OKR 小程序端 项目名称版本号测试负责人测试完成日期联系方式OKR 小程序端4.0马铭胜2025-03-2515362558972 1、项目背景 1.1 OKR 用户端 在如今这个快节奏的时代中,个人和组织的成长往往依赖于清晰、明确且意义深远的目标。然而,如何设定…...
LibVLC —— 《基于Qt的LibVLC专业开发技术》视频教程
🔔 LibVLC/VLC 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 《基于Qt的LibVLC专业开发技术》课程视频,(CSDN课程主页、51CTO课程主页) 适合具有一些C++/Qt编程基础,想要进一步提高或涉足音视频行业的。本课程分7章节,共计35小节。…...
故障识别 | 基于改进螂优化算法(MSADBO)优化变分模态提取(VME)结合稀疏最大谐波噪声比解卷积(SMHD)进行故障诊断识别,matlab代码
基于改进螂优化算法(MSADBO)优化变分模态提取(VME)结合稀疏最大谐波噪声比解卷积(SMHD)进行故障诊断识别 一、引言 1.1 机械故障诊断的背景和意义 在工业生产的宏大画卷中,机械设备的稳定运行…...