当前位置: 首页 > news >正文

机器学习周报-TCN文献阅读

文章目录

    • 摘要
    • Abstract
  • 1 TCN通用架构
    • 1.1 序列建模任务描述
    • 1.2 因果卷积(Causal Convolutions)
    • 1.3 扩张卷积(Dilated Convolutions)
    • 1.4 残差连接(Residual Connections)
  • 2 TCN vs RNN
  • 3 TCN缺点
  • 4 代码
    • 4.1 TCN通用代码
    • 4.2 torch.nn.Conv1d
    • 总结

摘要

TCN(Temporal Convolutional Networks,时间卷积网络)是一种专门用于处理时间序列数据的深度学习模型。它结合了卷积神经网络(CNN)的并行处理能力和循环神经网络(RNN)的长期依赖建模能力,成为序列建模任务中的强大工具。TCN主要使用因果卷积来确保网络在预测时只能使用当前和过去的信息,而不能看到未来的数据;使用扩张卷积跳过部分输入来使卷积核可以应用于大于卷积核本身长度的区域,从而增加网络的感受野;同时利用残差连接来增加网络的深度,这有助于训练深层网络并减少梯度消失的问题。但是存在评估期间的数据存储和域迁移的潜在参数变化等问题。

Abstract

TCN (Temporal Convolutional Networks) is a deep learning model specifically designed for processing time series data. It combines the parallel processing capabilities of Convolutional Neural Networks (CNNs) with the long-term dependency modeling capabilities of Recurrent Neural Networks (RNNs), making it a powerful tool for sequence modeling tasks. TCN primarily uses causal convolution to ensure that the network can only use current and past information during prediction, without access to future data; it employs dilated convolution to skip over parts of the input, allowing the convolutional kernel to be applied to regions larger than the length of the kernel itself, thereby increasing the network’s receptive field; and it utilizes residual connections to increase the depth of the network, which helps in training deep networks and reducing the problem of vanishing gradients. However, there are potential issues such as data storage during evaluation and parameter changes in domain migration.

论文链接:https://arxiv.org/pdf/1803.01271

1 TCN通用架构

TCN的显著特征

  1. 因果卷积(Causal Convolution):TCN中的卷积操作是因果的,这意味着在预测当前时刻的值时,模型只使用当前时刻及之前的数据,而不使用未来数据。这种设计保证了模型的因果性,避免了信息泄露的问题
  2. 能够处理可变长度的输入序列,并将其映射到相同长度的输出序列。(输入和输出序列长度一致)。
  3. 扩张卷积(Dilated Convolution):TCN通过使用扩张卷积来扩大卷积层的感受野,使网络能够在不增加参数数量或计算复杂性的情况下捕捉长范围的序列依赖关系。扩张卷积通过在卷积核之间插入空洞来实现,有效地提高了计算效率,并缓解了梯度消失问题

1.1 序列建模任务描述

我们有一个输入序列: x 0 , x 1 , . . . . . x t x_0,x_1,.....x_t x0,x1,.....xt,我们希望预测出一些对应的输出: y 0 , y 1 , . . . . . y t y_0,y_1,.....y_t y0,y1,.....yt。但是有一个限制:如预测某一时间t的输出 y t y_t yt,只能观察时间t及时间t以前的输入( x 0 , x 1 , . . . . . x t x_0,x_1,.....x_t x0,x1,.....xt)。序列建模网络是任何函数: f ( x t + 1 ) = y t + 1 f(x_{t+1})=y_{t+1} f(xt+1)=yt+1,生成的映射是:
y ^ 0 , y ^ 1 . . . . y ^ T = f ( x 0 , x 1 . . . . x T ) \hat{y}_0,\hat{y}_1....\hat{y}_T=f({x}_0,{x}_1....{x}_T) y^0,y^1....y^T=f(x0,x1....xT)

y t 仅依赖于 x 0 , x 1 . . . . x t y_t仅依赖于x_0,x_1....x_t yt仅依赖于x0,x1....xt,而不依赖于未来的输入 x t + 1 , . . . . . x T x_{t+1},.....x_T xt+1,.....xT,则在序列建模设置中学习的任务是,找到网络f,使实际输出和预测值之间的预期最小, L ( y 0 , . . . . y T , f ( x 0 , . . . x T ) ) L(y_0,....y_T,f(x_0,...x_T)) L(y0,....yT,f(x0,...xT)),其中序列和输出根据某一概率分布抽取。

1.2 因果卷积(Causal Convolutions)

TCN使用因果卷积(Causal Convolution)来确保模型不会违反时间顺序。因果卷积的输出只依赖于当前时刻及其之前的输入,而不依赖于未来的输入。在标准的卷积操作中,每个输出值都基于其周围的输入值,包括未来的时间点。但在因果卷积中,权重仅应用于当前和过去的输入值,确保了信息流的方向性,避免了未来信息泄露到当前输出中。为了实现这一点,通常会在卷积核的右侧填充零(称为因果填充),这样只有当前和过去的信息被用于计算输出。

在这里插入图片描述
图1:卷积核为2

公式: y t = ∑ i = 0 k − 1 f ( i ) X t − i y_t=\sum^{k-1}_{i=0}f(i)X_{t-i} yt=i=0k1f(i)Xti

d表示扩张率(dilation factor),k表示卷积核大小(filter size)

因果卷积存在问题: 需要一个非常深的网络或非常大的filters来增加卷积的感受野

通过使用扩张卷积来实现非常深的网络和增加卷积的感受野大小

1.3 扩张卷积(Dilated Convolutions)

一个简单的因果卷积只能回顾网络深度上有限大小的历史信息,在面对较长的历史的任务时,要如何解决?

使用扩张卷积来实现指数级大的感受野,使用扩张卷积,随着网络的深度以指数方式增加d(即 d = O ( 2 i ) d=O(2^i) d=O(2i) i i i 表示网络为第几层),这使卷积核可以命中有效历史中的每个输入,同时还允许使用更深的网络来处理非常大的有效历史。

下图为:扩张因果卷积图,其中扩张因子d=1,2,4;卷积核k大小=3

在这里插入图片描述

如图所示, 每一层中一个单元要回顾上一层中(k-1)×d个有效历史信息(扩张因子决定了卷积核中元素之间的间距,例如,如果扩张因子为2,则卷积核中的元素会间隔一个输入单元)。

公式:
y t = ∑ i = 0 k − 1 f ( i ) X t − d ⋅ i y_t=\sum^{k-1}_{i=0}f(i)X_{t-d·i} yt=i=0k1f(i)Xtdi
d表示扩张率(dilation factor),k表示卷积核大小(filter size)

1.4 残差连接(Residual Connections)

TCN的感受野取决于

  1. 网络深度n;
  2. 卷积核大小k;
  3. 扩张因子d;

在实际预测中,可能取决于大小为 2 12 2^{12} 212的历史和高维输入序列,就需要多达12层的网络,就是每一层由多个用于特征提取的卷积核组合。在通用TCN模型中,采用了通用残差模块代替卷积层。

如图 TCN 结构图。 一个残差块包含两层的卷积和非线性映射,在每层中还加入了 WeightNorm 和 Dropout 来正则化网络。为什么要 1×1 卷积呢?1×1 卷积是可以用来降维的 。作者直接把较下层的特征图跳层连接到上层,对应的每个 Cell 的特征图数量(也就是通道数 channel)不一致,导致不能直接做类似 Resnet 的跳层特征图加和操作,于是,为了两个层加和时特征图数量吻合,用 1×1 卷积做了一个降维的操作。

在这里插入图片描述
TCN使用残差连接来缓解梯度消失问题并促进更深层网络的训练。残差连接是残差网络(ResNets)的关键组成部分,由何凯明等人提出。它的主要目的是解决深层神经网络训练中的梯度消失/爆炸问题,以及提高网络的训练效率和性能。在残差连接中,网络的某一层的输出直接加到几层之后的另一层上,形成所谓的“跳跃连接”。

具体来说,假设有一个输入 x x x,经过几层后得 F ( x ) F(x) F(x),那么最终的输出不是 F ( x ) F(x) F(x),而是 x + F ( x ) x+F(x) x+F(x),也就是输入+输出。这种结构允许梯度在反向传播时可以直接流回更早的层,减少了梯度消失的问题,并且使得网络能够有效地训练更深的架构。残差块的输出可以表示为:

o u t p u t = A c t i v a t i o n ( x + F ( x ) ) output=Activation(x+F(x)) output=Activation(x+F(x))

其中 F F F是卷积层和激活函数的组合。
残差连接如下图所示:

在这里插入图片描述

2 TCN vs RNN

相比较RNN,TCN有如下优势:

  1. 并行计算: 卷积可以并行进行。(在训练和评估中,在TCN中可以将长输入序列作为一个整体来处理,而不是像在RNN中那样顺序地处理。)
  2. 灵活的感受野大小: 通过堆叠更多的因果卷积层、增大扩张率和卷积核,可增大感受野。
  3. 稳定的梯度: 与递归体系结构不同,TCN具有与序列的时间方向不同的反向传播路径;故TCN没有梯度爆炸的问题。

3 TCN缺点

  • 评估期间的数据存储: 在评估/测试中,TCN需要接收到有效历史长度的原始序列,因此在评估期间可能需要更多内存。(RNN只需要保持隐藏状态并接受当前输入 x t x_t xt即可生成预测)
  • 域迁移的潜在参数变化: 不同领域对模型预测所需的历史数量可能有不同的要求。因此,当将模型从只需要很少内存的域转移到需要更长内存的域时,TCN可能会因为没有足够大的感受野而表现不佳。

4 代码

4.1 TCN通用代码

  • Chomp1d 类
    用于去除卷积输出中的最后几个元素,在应用了填充(padding)的卷积之后,保持输出序列的长度跟输入序列长度相同。
class Chomp1d(nn.Module):def __init__(self, chomp_size):super(Chomp1d, self).__init__()self.chomp_size = chomp_sizedef forward(self, x):return x[:, :, :-self.chomp_size].contiguous()

chomp_size:指定要去除的元素数量。

  • TemporalBlock 类

TemporalBlock是TCN中的基本构建块,它包含两个卷积层,每个卷积层后面跟着ReLU激活函数和dropout层,以减少过拟合。

class TemporalBlock(nn.Module):def __init__(self, n_inputs, n_outputs, kernel_size, stride, dilation, padding, dropout=0.2):super(TemporalBlock, self).__init__()self.conv1 = weight_norm(nn.Conv1d(n_inputs, n_outputs, kernel_size,stride=stride, padding=padding, dilation=dilation))self.chomp1 = Chomp1d(padding)self.relu1 = nn.ReLU()self.dropout1 = nn.Dropout(dropout)self.conv2 = weight_norm(nn.Conv1d(n_outputs, n_outputs, kernel_size,stride=stride, padding=padding, dilation=dilation))self.chomp2 = Chomp1d(padding)self.relu2 = nn.ReLU()self.dropout2 = nn.Dropout(dropout)self.net = nn.Sequential(self.conv1, self.chomp1, self.relu1, self.dropout1,self.conv2, self.chomp2, self.relu2, self.dropout2)self.downsample = nn.Conv1d(n_inputs, n_outputs, 1) if n_inputs != n_outputs else Noneself.relu = nn.ReLU()self.init_weights()def init_weights(self):self.conv1.weight.data.normal_(0, 0.01)self.conv2.weight.data.normal_(0, 0.01)if self.downsample is not None:self.downsample.weight.data.normal_(0, 0.01)def forward(self, x):out = self.net(x)res = x if self.downsample is None else self.downsample(x)return self.relu(out + res)
  • TemporalConvNet 类
    TemporalConvNet 是整个TCN模型,它由多个 TemporalBlock 堆叠而成。
class TemporalConvNet(nn.Module):def __init__(self, num_inputs, num_channels, kernel_size=2, dropout=0.2):super(TemporalConvNet, self).__init__()layers = []num_levels = len(num_channels)for i in range(num_levels):dilation_size = 2 ** iin_channels = num_inputs if i == 0 else num_channels[i-1]out_channels = num_channels[i]layers += [TemporalBlock(in_channels, out_channels, kernel_size, stride=1, dilation=dilation_size,padding=(kernel_size-1) * dilation_size, dropout=dropout)]self.network = nn.Sequential(*layers)def forward(self, x):return self.network(x)

参数:

  • num_inputs: 输入特征的数量。
  • num_channels: 一个列表,指定了每个 TemporalBlock 的输出通道数。
  • kernel_size: 卷积核的大小。
  • dropout: dropout层的丢弃概率,用于正则化以减少过拟合。
  • stride: 卷积的步长,这里设置为1。
  • dilation: 卷积的扩张率,用于控制卷积核的覆盖范围。
  • padding: 卷积的填充,确保输出序列长度不变。

TCN的网络结构是通过堆叠多个 TemporalBlock 来构建的。每个块的扩张率是前一个块的两倍,这样可以增加模型的感受野,同时保持时间序列数据的局部性。

4.2 torch.nn.Conv1d

torch.nn.Conv1d
一维卷积nn.Conv1d主要用于文本数据,只对宽度进行卷积,对高度不卷积。通常,输入大小为word_embedding_dim * max_length,其中,word_embedding_dim为词向量的维度,max_length为句子的最大长度。卷积核窗口在句子长度的方向上滑动,进行卷积操作。

torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, 
dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

原理示意图
在这里插入图片描述

  • 参数说明:
  1. in_channels:输入通道数;在文本应用中,即为词向量的维度;
  2. out_channels:输出通道数,等价于卷积核个数;
  3. kernel_size :卷积核大小;卷积核的第二个维度由in_channels决定,所以实际上卷积核的大小为kernel_size * in_channels
  4. stride:卷积步长,默认为 1;
  5. padding: 默认为 0;对输入的每一条边,补充0的层数;
  6. dilation:空洞卷积尺寸,默认为 1;

输入输出格式:

  1. Input: ( N , C i n , L i n ) (N,C_{in},L_{in}) (N,Cin,Lin)
  2. Output: ( N , C o u t , L o u t ) (N,C_{out},L_{out}) (N,Cout,Lout)

其中 L o u t = ⌊ L i n + 2 × p a d d i n g − d i l a t i o n × ( k e r n e l s i z e − 1 ) − 1 s t r i d e + 1 ⌋ L_{out}=\lfloor \frac{L_{in}+2×padding-dilation×(kernel_size-1)-1}{stride} +1\rfloor Lout=strideLin+2×paddingdilation×(kernelsize1)1+1

其中:

  • N表示batch_size; L i n L_{in} Lin表示输入的长度; L o u t L_{out} Lout表示输出的长度
  • C i n C_{in} Cin必须与Conv1中参数 in_channels 值相同
  • C o u t C_{out} Cout必须与Conv1中参数 out_channels 值相同

代码:

import torch
import torch.nn as nn# 创建一个一维卷积层,输入通道数为1,输出通道数为2,卷积核大小为3
conv1d = nn.Conv1d(in_channels=1, out_channels=2, kernel_size=3)# 创建一个随机输入数据,形状为[batch_size, in_channels, sequence_length]
input_data = torch.randn(2, 1, 10)  # batch_size=2, in_channels=1, sequence_length=10
# 应用卷积操作
output_data = conv1d(input_data)# 输出数据的形状
#  batch_size=2, out_channels=2, new_sequence_length=8
print(output_data.shape)  # 将输出形状,例如:torch.Size([2, 2, 8])

输出:

torch.Size([2, 2, 8])

其中输出长度为= L o u t = ⌊ L i n + 2 × p a d d i n g − d i l a t i o n × ( k e r n e l s i z e − 1 ) − 1 s t r i d e + 1 ⌋ L_{out}=\lfloor \frac{L_{in}+2×padding-dilation×(kernel_size-1)-1}{stride} +1\rfloor Lout=strideLin+2×paddingdilation×(kernelsize1)1+1

= ⌊ 10 + 2 × 0 − 1 × ( 3 − 1 ) − 1 1 + 1 ⌋ \lfloor \frac{10+2×0-1×(3-1)-1}{1} +1\rfloor 110+2×01×(31)1+1=8

  • 扩张率d为2:
# 创建一个一维卷积层,输入通道数为1,输出通道数为2,卷积核大小为3,扩张率d=2
conv1d = nn.Conv1d(in_channels=1, out_channels=2, kernel_size=3, dilation=2)
print(output_data.shape) 

输出:

torch.Size([2, 2, 6])

其中输出长度为= L o u t = ⌊ L i n + 2 × p a d d i n g − d i l a t i o n × ( k e r n e l s i z e − 1 ) − 1 s t r i d e + 1 ⌋ L_{out}=\lfloor \frac{L_{in}+2×padding-dilation×(kernel_size-1)-1}{stride} +1\rfloor Lout=strideLin+2×paddingdilation×(kernelsize1)1+1

= ⌊ 10 + 2 × 0 − 2 × ( 3 − 1 ) − 1 1 + 1 ⌋ \lfloor \frac{10+2×0-2×(3-1)-1}{1} +1\rfloor 110+2×02×(31)1+1=6

总结

本周阅读论文学习了TCN模型的相关原理、结构和代码;TCN能够并行处理多个时间步的输入,提高模型的训练和推理速度,同时保持对长期依赖关系的捕捉能力。

相关文章:

机器学习周报-TCN文献阅读

文章目录 摘要Abstract 1 TCN通用架构1.1 序列建模任务描述1.2 因果卷积(Causal Convolutions)1.3 扩张卷积(Dilated Convolutions)1.4 残差连接(Residual Connections) 2 TCN vs RNN3 TCN缺点4 代码4.1 TC…...

UniApp 页面布局基础

一、UniApp 页面布局简介 在当今的移动应用开发领域,跨平台开发已成为一种主流趋势。UniApp作为一款极具影响力的跨平台开发框架,凭借其“一套代码,多端运行”的特性,为开发者们提供了极大的便利,显著提升了开发效率。…...

最新的强大的文生视频模型Pyramid Flow 论文阅读及复现

《PYRAMIDAL FLOW MATCHING FOR EFFICIENT VIDEO GENERATIVE MODELING》 论文地址:2410.05954https://arxiv.org/pdf/2410.05954 项目地址: jy0205/Pyramid-Flow: 用于高效视频生成建模的金字塔流匹配代码https://github.com/jy0205/Pyram…...

论文阅读 - 《Large Language Models Are Zero-Shot Time Series Forecasters》

Abstract 通过将时间序列编码为数字组成的字符串,我们可以将时间序列预测当做文本中下一个 token预测的框架。通过开发这种方法,我们发现像GPT-3和LLaMA-2这样的大语言模型在下游任务上可以有零样本时间序列外推能力上持平或者超过专门设计的时间序列训…...

STM32文件详解

STM32文件详解 启动文件打开MDK栈空间开辟堆空间开辟中断向量表复位程序对于 weak 的理解对于_main 函数的分析中断程序堆栈初始化系统启动流程 时钟树时钟源时钟配置函数时钟初始化配置函数 启动文件 启动文件的方式 1、初始化堆栈指针 SP _initial_sp 2、初始化程序计数器指…...

【Spring】详解(上)

Spring 框架核心原理与应用(上) 一、Spring 框架概述 (一)诞生背景 随着 Java 应用程序规模的不断扩大以及复杂度的日益提升,传统的 Java开发方式在对象管理、代码耦合度等方面面临诸多挑战。例如,对象之…...

大数据面试笔试宝典之Flink面试

1.Flink 是如何支持批流一体的? F link 通过一个底层引擎同时支持流处理和批处理. 在流处理引擎之上,F link 有以下机制: 1)检查点机制和状态机制:用于实现容错、有状态的处理; 2)水印机制:用于实现事件时钟; 3)窗口和触发器:用于限制计算范围,并定义呈现结果的…...

Rust编程与项目实战-箱

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 对于Rust而言,箱(crate)是一个独立的可编译单元&…...

git回退指定版本/复制提交id

1.使用“git reset --hard 目标版本号”命令将版本回退2.使用“git push -f”提交更改 因为我们回退后的本地库HEAD指向的版本比远程库的要旧,此时如果用“git push”会报错。 改为使用 git push -f 即可完成回退后的提交。...

数据库锁的深入探讨

数据库锁(Database Lock)是多用户环境中用于保证数据一致性和隔离性的机制。随着数据库系统的发展,特别是在高并发的场景下,锁的机制变得尤为重要。通过使用锁,数据库能够防止并发操作导致的数据冲突或不一致。本文将深…...

《机器学习》——KNN算法

文章目录 KNN算法简介KNN算法——sklearnsklearn是什么?sklearn 安装sklearn 用法 KNN算法 ——距离公式KNN算法——实例分类问题完整代码——分类问题 回归问题完整代码 ——回归问题 KNN算法简介 一、KNN介绍 全称是k-nearest neighbors,通过寻找k个距…...

iOS开发代码块-OC版

iOS开发代码块-OC版 资源分享资源使用详情Xcode自带代码块自定义代码块 资源分享 自提: 通过网盘分享的文件:CodeSnippets 2.zip 链接: https://pan.baidu.com/s/1Yh8q9PbyeNpuYpasG4IiVg?pwddn1i 提取码: dn1i Xcode中的代码片段默认放在下面的目录中…...

关于在M系列的Mac中使用SoftEtherClient软件

1. 前言 本文说明的是在M系列的苹果的MacBook中如何使用SoftetherClient这款软件,是直接在MacOS操作系统中安装连接使用,不是在PD环境或者非ARM架构的Mac中安装使用。 PS:别费劲百度了,很少有相关解决方案的,在国内会…...

【畅购商城】详情页模块之评论

目录 接口 分析 后端实现:JavaBean 后端实现 前端实现 接口 GET http://localhost:10010/web-service/comments/spu/2?current1&size2 { "code": 20000, "message": "查询成功", "data": { "impressions&q…...

机器学习DAY4续:梯度提升与 XGBoost (完)

本文将通过 XGBoost 框架来实现回归、分类和排序任务,帮助理解和掌握使用 XGBoost 解决实际问题的能力。我们将从基本的数据处理开始,逐步深入到模型训练、评估以及预测。最后,将模型进行保存和加载训练好的模型。 知识点 回归任务分类任务…...

Maven 测试和单元测试介绍

一、测试介绍 二、单元测试 1&#xff09;介绍 2&#xff09;快速入门 添加依赖 <dependencies><!-- junit依赖 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9…...

LeetCode7. 整数反转

难度&#xff1a;中等 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示…...

Java编程题_面向对象和常用API01_B级

Java编程题_面向对象和常用API01_B级 第1题 面向对象、异常、集合、IO 题干: 请编写程序&#xff0c;完成键盘录入学生信息&#xff0c;并计算总分将学生信息与总分一同写入文本文件 需求&#xff1a;键盘录入3个学生信息(姓名,语文成绩,数学成绩) 求出每个学生的总分 ,并…...

WEB攻防-通用漏洞-文件上传-js验证-MIME验证-user.ini-语言特征

目录 定义 1.前端验证 2.MIME验证 3.htaccess文件和.user. ini 4.对内容进行了过滤&#xff0c;做了内容检测 5.[ ]符号过滤 6.内容检测php [] {} ; 7.()也被过滤了 8.反引号也被过滤 9.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件&#xff08;如木马…...

ubuntu20.04 调试bcache源码

搭建单步调试bcache的环境&#xff0c;/dev/sdb作为backing dev&#xff0c; /dev/sdc作为cache dev。 一、宿主机环境 1&#xff09;安装ubuntu 20.04 &#xff1a; 参考ubuntu20.04 搭建kernel调试环境第一篇--安装系统_ubuntu kernel-CSDN博客安装&#xff0c;其中的第六…...

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(for循环语句)(四)

实战训练1—最大差值 问题描述&#xff1a; 输入n个非负整数&#xff0c;找出这个n整数的最大值与最小值&#xff0c;并求最大值和最小值的差值。 输入格式&#xff1a; 共两行&#xff0c;第一行为整数的个数 n&#xff08;1≤n≤1000)。第二行为n个整数的值&#xff08;整…...

基于深度学习(HyperLPR3框架)的中文车牌识别系统-python程序开发测试

本篇内容为python开发&#xff0c;通过一个python程序&#xff0c;测试搭建的开发环境&#xff0c;读入一张带有车牌号的图片&#xff0c;成功识别出车牌号。 1、通过PyCharm新建一个工程&#xff0c;如&#xff1a;PlateRecognition&#xff0c;配置虚拟环境。 2、在工程中新…...

【SpringMVC】拦截器

拦截器&#xff08;Interceptor&#xff09;是一种用于动态拦截方法调用的机制。在 Spring MVC 中&#xff0c;拦截器能够动态地拦截控制器方法的执行过程。以下是请求发送与接收的基本流程&#xff1a; 当浏览器发出请求时&#xff0c;请求首先到达 Tomcat 服务器。Tomcat 根…...

离线的方式:往Maven的本地仓库里安装依赖

jar文件及源码的绝对路径&#xff0c;gav坐标&#xff0c;打包方式&#xff0c;Maven本地仓库的路径 mvn install:install-file ^-DfileD:\hello-spring-boot-starter-1.0-SNAPSHOT.jar ^-DsourcesD:\hello-spring-boot-starter-1.0-SNAPSHOT-sources.jar ^-DgroupIdcom.examp…...

短视频矩阵系统后端源码搭建实战与技术详解,支持OEM

一、引言 随着短视频行业的蓬勃发展&#xff0c;短视频矩阵系统成为了众多企业和创作者进行多平台内容运营的有力工具。后端作为整个系统的核心支撑&#xff0c;负责处理复杂的业务逻辑、数据存储与交互&#xff0c;其搭建的质量直接影响着系统的性能、稳定性和可扩展性。本文将…...

ArcGIS Pro地形图四至角图经纬度标注与格网标注

今天来看看ArcGIS Pro 如何在地形图上设置四至角点的经纬度。方里网标注。如下图的地形图左下角经纬度标注。 如下图方里网的标注 如下为本期要介绍的例图&#xff0c;如下&#xff1a; 图片可点击放大 接下来我们来介绍一下 推荐学习&#xff1a;GIS入门模型构建器Arcpy批量…...

鸿蒙Next状态管理V2 - @Once初始化用法总结

一、概述 Once装饰器用于实现变量仅在初始化时同步一次外部传入值&#xff0c;后续数据源更改时不会将修改同步给子组件。其必须搭配Param使用&#xff0c;且不影响Param的观测能力&#xff0c;仅拦截数据源变化&#xff0c;与Param装饰变量的先后顺序不影响实际功能&#xff…...

全新免押租赁系统助力商品流通高效安全

内容概要 全新免押租赁系统的推出&#xff0c;可以说是一场商品流通领域的小革命。想象一下&#xff0c;不再为押金烦恼&#xff0c;用户只需通过一个简单的信用评估&#xff0c;就能快速租到所需商品&#xff0c;这种体验简直令人惊喜&#xff01;这个系统利用代扣支付技术&a…...

VUE前端实现防抖节流 Lodash

方法一&#xff1a;采用Lodash工具库 Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。 &#xff08;1&#xff09;采用终端导入Lodash库 $ npm i -g npm $ npm i --save lodash &#xff08;2&#xff09;应用 示例&#xff1a;搜索框输入防抖 在这个示例…...

Redisson 框架详解

目录 一.为什么要使用分布式锁&#xff1f; 二.Redisson 的基本使用&#xff1a; 1.添加 Redisson 依赖&#xff1a; 2.在 application.yml 配置 Redis&#xff1a; 3. 创建 Redisson 客户端&#xff1a; &#xff08;1&#xff09;单节点模式&#xff1a; &#xff08;…...

WebSocket 入门详解

开发领域&#xff1a;前端开发 | AI 应用 | Web3D | 元宇宙 技术栈&#xff1a;JavaScript、React、Three.js、WebGL、Go 经验经验&#xff1a;6年 前端开发经验&#xff0c;专注于图形渲染和AI技术 开源项目&#xff1a;智简未来 晓智元宇宙、数字孪生引擎 大家好&#xff01;…...

chinahrt 题库

只针对 https://ouc-sz.chinahrt.com/center/MyExam import requests import time import random import pandas as pd from openpyxl import load_workbookexcel_file rC:\Users\N3verL4nd\Desktop\exam_answers.xlsx# 定义请求头&#xff0c;包含 Authorization headers {…...

uniapp通过v-if进行判断时,会出现闪屏?【已解决】

1.问题&#xff1a;按钮切换时&#xff0c;通过v-if来判断&#xff0c;会出现闪烁情况&#xff0c;影响用户体验 2.v-if 闪烁问题可能的原因 ‌条件切换频繁‌&#xff1a;如果 v-if 指令的条件在短时间内频繁切换&#xff0c;会导致元素不断被销毁和重新创建&#xff0c;从而…...

jmeter设置tps、响应时间监测时间间隔

jmeter设置tps、响应时间监测时间间隔 思路&#xff1a; 1、设置tps和响应时间插件的采集时间间隔&#xff0c;然后运行jmeter脚本&#xff1b; 2、先按默认配置跑出jtl文件保存下来&#xff0c;再添加tps和响应时间插件&#xff0c;设置采集时间间隔后&#xff0c;导入jtl文件…...

Android Notification 问题:Invalid notification (no valid small icon)

问题描述与处理策略 1、问题描述 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.notifications/com.my.notifications.MainActivity}: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(chan…...

Kotlin 协程基础知识总结四 —— Flow

异步流 Flow 主要内容&#xff1a; 认识&#xff1a;特性、构建器与上下文、启动、取消与取消检测特性、缓冲操作符&#xff1a;过渡操作符、末端操作符、组合、扁平异常&#xff1a;异常处理、完成 1、认识 1.1 如何异步返回多个值 挂起函数可以异步返回单个值&#xff0c…...

Ubuntu24.04安装NVIDIA驱动及工具包

Ubuntu24.04安装NVIDIA驱动及工具包 安装nvidia显卡驱动安装cuda驱动安装cuDNN安装Anaconda 安装nvidia显卡驱动 NVIDIA 驱动程序&#xff08;NVIDIA Driver&#xff09;是专为 NVIDIA 图形处理单元&#xff08;GPU&#xff09;设计的软件&#xff0c;它充当操作系统与硬件之间…...

雷电模拟器安装LSPosed

雷电模拟器最新版支持LSPosed。记录一下安装过程 首先到官网下载并安装最新版&#xff0c;我安装的时候最新版是9.1.34.0&#xff0c;64位 然后开启root和系统文件读写 然后下载magisk-delta-6并安装 ,这个是吾爱破解论坛提供的&#xff0c;号称适配安卓7以上所有机型&#x…...

基于深度学习(HyperLPR3框架)的中文车牌识别系统-搭建开发环境

本篇内容为搭建开发环境。包括&#xff1a;python开发环境&#xff0c;Qt/C开发环境&#xff0c;以及用到的各个库的安装和配置。 一、Python开发环境搭建与配置 1、下载并安装Anaconda 我没有用最新的版本&#xff0c;安装的是 Anaconda3-2021.05-Windows-x86_64.exe&#…...

TCP 为什么采用三次握手和四次挥手以及 TCP 和 UDP 的区别

1. TCP 为什么采用三次握手和四次挥手 采用三次握手的原因&#xff1a; 确认双方的收发能力。第一次握手&#xff0c;客户端发送 SYN 报文&#xff0c;告诉服务器自身具备发送数据的能力&#xff0c;第二次握手&#xff0c;服务器回应 SYN ACK 报文&#xff0c;表名自己既能…...

Apriori关联规则算法 HNUST【数据分析技术】(2025)

1.理论知识 Apriori是一种常用的数据关联规则挖掘方法&#xff0c;它可以用来找出数据集中频繁出现的数据集合。该算法第一次实现在大数据集上的可行的关联规则提取&#xff0c;其核心思想是通过连接产生候选项及其支持度&#xff0c;然后通过剪枝生成频繁项集。 Apriori算法的…...

Sqoop的使用

每个人的生活都是一个世界&#xff0c;即使最平凡的人也要为他那个世界的存在而战斗。 ——《平凡的世界》 目录 一、sqoop简介 1.1 导入流程 1.2 导出流程 二、使用sqoop 2.1 sqoop的常用参数 2.2 连接参数列表 2.3 操作hive表参数 2.4 其它参数 三、sqoop应用 - 导入…...

华为 IPD,究竟有什么特点?(一)

关注作者 &#xff08;一&#xff09;华为版 IPD 特点一&#xff1a;一定要让研发转身为作战 部队 冲到前台的研发&#xff0c;应主动拉通公司上下游&#xff0c;向前抓需求&#xff0c;向后支撑可制造性、可 服务性&#xff0c;并推动制造、服务的改进。 1&#xff09;研发从…...

Go快速开发框架2.6.0版本更新内容快速了解

GoFly企业版框架2.6.0版本更新内容较多&#xff0c;为了大家能够快速了解&#xff0c;本文将把更新内容列出详细讲解。本次更新一段时间以来大伙反馈的问题&#xff0c;并且升级后台安全认证机制&#xff0c;增加了RBAC权限管理及系统操作日志等提升后台数据安全性。 更新明细…...

C++的第一个程序

前言 在学习c之前&#xff0c;你一定还记得c语言的第一个程序 当时刚刚开始进行语言学习 因此告诉到&#xff0c;仅仅需要记住就可以 #include <stdio.h>int main(){printf("Hello World");return 0; }而对于c中的第一个程序&#xff0c;似乎有所变化 C的…...

《机器学习》线性回归模型实现

目录 一、一元线性回归模型 1、数据 2、代码 3、结果 二、多元线性回归模型 1、数据 2、代码 3、结果 一、一元线性回归模型 1、数据 2、代码 # 导入所需的库 import pandas as pd # 用于数据处理和分析 from matplotlib import pyplot as plt # 用于数据可视化 fr…...

蓝桥杯速成教程{三}(adc,i2c,uart)

目录 一、adc 原理图​编辑引脚配置 Adc通道使能配置 实例测试 ​编辑效果显示 案例程序 badc 按键相关函数 测量频率占空比 main 按键的过程 显示界面的过程 二、IIC通信-eeprom 原理图AT24C02 引脚配置 不可用状态&#xff0c;用的软件IIC 官方库移植 At24c02手册 ​编辑…...

【Agent】Chatbot、Copilot与Agent如何帮助我们的提升效率?

人工智能&#xff08;AI&#xff09;技术的迅猛发展正在深刻改变我们的生活和工作方式。你是否曾想过&#xff0c;未来的工作场景会是什么样子&#xff1f;AI的崛起不仅仅是科技的进步&#xff0c;更是我们生活方式的革命。今天&#xff0c;我们将深入探讨三种主要的AI能力&…...

PostgreSQL 数据库连接

title: PostgreSQL 数据库连接 date: 2024/12/29 updated: 2024/12/29 author: cmdragon excerpt: PostgreSQL是一款功能强大的开源关系数据库管理系统,在现代应用中广泛应用于数据存储和管理。连接到数据库是与PostgreSQL进行交互的第一步,这一过程涉及到多个方面,包括连…...

C++ 设计模式:中介者模式(Mediator Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 门面模式 链接&#xff1a;C 设计模式 - 代理模式 链接&#xff1a;C 设计模式 - 适配器 中介者模式&#xff08;Mediator Pattern&#xff09;是行为型设计模式之一&#xff0c;它的主要目的是通过一个中介者对象来…...