机器学习周记(第三十四周:文献阅读[GNet-LS])2024.4.8~2024.4.14

news2025/7/9 20:17:40

目录

摘要

ABSTRACT

1 论文信息

1.1 论文标题

1.2 论文摘要 

1.3 论文模型

1.3.1 数据处理

1.3.2 GNet-LS

2 相关代码


摘要

  本周阅读了一篇时间序列预测论文。论文模型为GNet-LS,主要包含四个模块:粒度划分模块(GD),变量间外部关系挖掘模块(ER),目标变量内部关系挖掘模块(IC)特征融合模块(DF)。首先,通过粒度划分模块将原始多元时间序列序列划分为多粒度序列,接着由变量间外部关系挖掘模块捕获外部关系,目标变量内部关系挖掘模块挖掘内部相关性,最后通过数据融合模块获得最终的预测结果。GNet-LS主要由CNN、LSTM、Attention、自回归组成。

ABSTRACT

This week, We read a paper on time series forecasting. The paper presents a model called GNet-LS, which consists of four main modules: Granularity Division (GD), External Relationship Mining between Variables (ER), Internal Correlation Mining of the Target Variable (IC), and Data Fusion (DF). First, the original multivariate time series is divided into multi-granularity sequences through the Granularity Division module. Then, the External Relationship Mining module captures external relationships, the Internal Correlation Mining module explores internal correlations, and finally, the Data Fusion module produces the final prediction result. GNet-LS mainly comprises CNNs, LSTMs, Attention mechanisms, and autoregressive components.

1 论文信息

1.1 论文标题

A multi-granularity hierarchical network for long- and short-term forecasting on multivariate time series data

1.2 论文摘要 

  多元时间序列预测是经济学、金融学和交通运输等多个领域中的一个重要研究问题,这些领域需要同时进行长期和短期预测。然而,当前的技术通常仅限于单一的短期或长期预测。为了解决这一限制,本文提出了一种新颖的多粒度层次网络GNet-LS,用于多元时间序列数据的长短期预测,该网络考虑了内部相关性和外部关系的独立作用。首先,基于下采样将原始时间序列序列划分为多个粒度序列,以减少由长期预测引起的误差累积。为了发现变量之间的外部关系,卷积神经网络(CNN)模块在变量序列上滑动。构建全局CNN和局部CNN分别实现周期性和非周期性提取。接着,使用自注意力模块模拟局部CNN和全局CNN输出之间的依赖关系。长短时记忆网络(LSTM)注意力机制用于挖掘时间序列目标变量的内部相关性。然后,以并行方式获得多粒度的外部关系和内部相关性。最后,通过拼接和叠加融合外部关系和内部相关性,以获得长期和短期预测。实验结果表明,所提出的GNet-LSRSECORRMAERMSE等方面优于一系列比较方法。

1.3 论文模型

1.3.1 数据处理

  给定时间序列X^{d}=\left \langle x_{1}^{d},...,x_{t}^{d},...,x_{T}^{d} \right \rangle是观测到的按时间顺序排列的测量值序列,其中x_{t}^{d}表示变量d在时间点t处的值,两个连续测量值之间的时间间隔通常是常数,T表示变量X^{(d)}的长度。多元时间序列记为X=\left \langle X^{1},...,X^{d},...,X^{D} \right \rangleX中的序列是相互关联的,D表示多元时间序列数据X中的变量个数。

多粒度表示:不同的时间粒度以多种方式描述。它可以被划分为年、月、日、小时、分钟乃至秒。因为不同的场景需要不同的时间粒度,所以为了充分分析预测任务的准确,适当的粒度至关重要。在不失一般性的前提下,可以首先给出单变量时间序列的粒度描述。对于给定的变量X^{(d)}X^{(d)}=\left \langle x_{1}^{(d)},...,x_{t}^{(d)},...,x_{T}^{(d)} \right \rangle的时间序列,将这个原始序列的粒度设置为g_{0},记作g_{0}(X^{(d)})=\left \langle x_{1}^{(d)},...,x_{t}^{(d)},...,x_{T}^{(d)} \right \rangle

  在本文中利用降采样方法呈现了从精细到粗糙的原始序列。也就是说,将原始序列按照降采样频率k_{1}<k_{2}<\cdot \cdot \cdot <k_{n}划分为n个粒度,分别表示为g_{1},g_{2},\cdot \cdot \cdot ,g_{n}。这里g_{1}(X^{(d)})=\left \langle x_{1}^{(d)},...,x_{1+k_{1}}^{(d)},...,x_{T_{k_{1}}}^{(d)} \right \rangleg_{n}(X^{(d)})=\left \langle x_{1}^{(d)},...,x_{1+k_{n}}^{(d)},...,x_{T_{k_{n}}}^{(d)} \right \ranglek_{n}表示降采样频率,g_{n}(X^{(d)})是具有频率k_{n}的结果。然后,得到了原始时间序列数据的n+1个粒度的数量,表示为G(X^{(d)})=\left \langle g_{0}(X^{(d)},g_{1}(X^{(d)},...,g_{s}(X^{(d)},...,g_{n}(X^{(d)}) \right \rangle s\in [1,n]

  对于多元时间序列数据,可以将每个变量视为单变量时间序列。因此,同样可以得到多变量时间序列数据的多粒度表示,表示为G(X)=\left \langle g_{0}(X),g_{1}(X),g_{2}(X),...,g_{n}(X) \right \rangle

问题定义:给定一组多元时间序列X=\left \langle X^{(1)},...,X^{(d)},...,X^{(D)} \right \rangle,其中D是变量数量,X^{(D)} \in R^{T}表示第D个变量具有T个时间点的序列。首先对多元时间序列数据进行降采样,并且主要以滚动预测的方式进行预测。也就是说,基于过去时间序列\left \langle X_{1},X_{t},...,X_{T} \right \rangle预测未来目标值X_{T+h},其中h是当前时间段可以预测的理想步长。X_{t}表示在时间tD个变量的取值,因此X_{t} \in R^{D}。同样地,可以试图基于\left \langle X_{1},X_{t},...,X_{T} \right \rangle预测未来目标值X_{T+h+p},其中p是可以在相同准确度下预测更长时间距离的理想步长。当然,p越大,模型在更长的步长上的表现就越好。X=\left \langle X^{(1)},...,X^{(d)},...,X^{(D)} \right \rangle \in R^{T \times D}代表了具有D个变量和T个时间步长的多元时间序列预测数据。多元时间序列数据的一个示例,即原始粒度序列,如Fig.1(a)所示。在粒度为k_{n}的采样后的粒度序列如Fig.1(b)所示。

Fig.1

1.3.2 GNet-LS

  GNet-LS包括四个模块,如Fig.2所示。首先,通过粒度划分模块将原始多元时间序列序列划分为多粒度序列,该模块简称为GD模块(粒度划分模块)。接下来,通过处理原始序列g_{0}(X),由变量间外部关系挖掘模块(简称ER模块)捕获外部关系。同时,通过处理多粒度序列如g_{1}(X)g_{2}(X)等等,目标变量内部关系挖掘模块(简称IC模块)挖掘内部相关性。然后,通过数据融合模块(简称DF模块)获得最终的预测结果。

  GNet-LS的总体概述如Fig.2所示。该图显示了论文所提出的模型从原始数据输入至粒度划分模块为起始,其中原始数据由频率采样机制进行粒度化,然后不同粒度的数据输入到后续的预测模块。也就是说,数据g_{1}(X)g_{2}(X)IC模块并行处理。最后,DF模块输出预测结果。

Fig.2

粒度划分模块(GD):不同时间粒度的数据反映的信息变化趋势不同。细粒度的时间序列可以保留更详细的信息,而大粒度的时间序列可以捕捉长期变化的趋势。因此,文中尝试从粒计算的角度将原始粒度数据划分为多粒度数据,进而从不同粒度序列中发现多元变量之间复杂的动态关系。

一般来说,我们获得的原始多元时间序列数据是单粒度数据。为此,文中引入了降采样方法,对原始数据按特定频率进行采样,以从原始数据中提取出更细粒度的时间序列。一个例子如Fig.3所示。

Fig.3

设置多少粒度仍然是一个具有挑战性的问题,可以作为未来的研究。论文主要证明的是多粒度思维是先进的。因此,在论文设计的模型中,模型的粒度简单地被设置为3。即原始序列g_{0}(X),两个子粒度序列g_{1}(X)g_{2}(X),分别按下采样频率k_{1}k_{2}对粒度序列进行采样。如果输入的时间序列是X \in R^{D \times T},那么可以定义如下三种粒度序列:  

g_{0}(X)=\left \langle X_{1},X_{2},...,X_{T} \right \rangle                                                                                                        (1)

g_{1}(X)=\left \langle X_{1},X_{1+k_{1}},...,X_{T_{k1}} \right \rangle                                                                                               (2)

g_{2}(X)=\left \langle X_{1},X_{1+k_{2}},...,X_{T_{k2}} \right \rangle                                                                                               (3)

通过采样,可以试图恢复原始序列中的一些周期特性。利用划分后的粒度序列挖掘长期预测中变化的底层模式。这种多频率采样周期挖掘方法有望显著降低步长累积效应的预测误差,并希望不同粒度的序列能够对不同的预测步骤起到不同的支持作用。

窗口滑动技术是处理多元时间序列的常用技术。在这项工作中,每个粒度序列相应地固定一个计算窗口的尺寸。对于上面的粒度划分公式,需要注意T_{k1}T_{k2}T小,因为需要确保滑动窗口中的粒度划分。然后,随着窗口的移动,窗口中的数据将发生变化,模型将使用不同的数据进行训练。

变量间外部关系挖掘模块(ER):卷积神经网络的成功很大程度上依赖于其捕捉必要信号的能力。这一特性使得卷积神经网络(CNN)特别适用于序列预测。因此,在本文中,主要介绍CNN用于特征提取。由于数据集多样性,一些数据集具有明显的周期性,而另一些则没有明显周期性。为了使模型更好地适应这两种情况,论文计划设计全局CNN和局部CNN共同工作。

多个n_{G} filters协同构成全局CNN(G-CNN)。每个filter将扫描一次变量,因此每次扫描后将生成一个D \times 1向量。由于有n_{G}filter,每个filter扫描一次输入,当所有filter扫描完成后,将生成一个D \times n_{G}矩阵。所使用的激活函数是ReLU函数。向量的每一行可以被视为单个变量的学习表示,然后通过随后的多头注意力机制,学习所有特征,并为后续预测做出更好的决策。

局部CNN(L-CNN)采取与全局CNN相似的方法。L-CNN专注于建立局部时间模式。局部时间卷积核使用长度为lfilter,超参数l<T。局部卷积核通过滑动方法提取信息。例如,对于步长为T的时间序列,创建一个长度为T-l+1的向量。为了将每个特征时间关系映射到一个向量表示,论文使用一维最大池化层在序列的每个滑动步骤后捕获最具代表性的特征,池化层的大小为T-l+1。最后,产生一个D \times n_{L}矩阵,其中n_{L}是局部卷积核中的filter数量。局部卷积神经网络的过程如Fig.4(a)所示。

为了捕捉不同序列之间的关系,对于每个特征变量,模型分别使用自注意力机制学习,因为其具有强大的特征提取能力。然后,模型通过多头注意力机制学习自身与其他序列之间的关系。自注意力机制的组成如Fig.4(b)所示。

Fig.4

全局卷积神经网络(G-CNNs)局部卷积神经网络(L-CNNs)的输出作为注意力处理的输入,然后将结果显示为QueryKeyValue向量。接着,通过加权,创建了一个具有特定权重关系的输出,这可以被理解为更加关注有用的信息。每个点的权重是通过计算时间序列中其他点的Query与当前点的Key的内积来计算的,然后将Value乘以内积后继续向前处理,以获得当前模块的输出。QueryKeyValue之间的关系如下:

Z = softmax(\frac{Q(K)^{T}}{\sqrt{d}})V                                                                                                          (4)

其中dkey的维度。使用多头注意力机制允许模型共同处理来自不同表示的信息,这些信息被串联起来并线性投影以获得最终的表示Z

逐位置前馈层由两个线性变换组成,在它们之间有一个\textup{ReLU}激活函数,可以表示为:

h_{t}^{O}=ReLU(ZW_{1}+b_{1})W_{2}+b_{2}                                                                                           (5)

虽然线性变换在不同位置是相同的,但它们使用不同的参数。每个子层周围的层归一化和残差连接使得训练更容易并且提高泛化性能。无论是在G-CNNs还是L-CNNs中都有上述过程,即通过将Z输入到模块中获得最终的h_{t}^{O}

目标变量内部关系挖掘模块(IC):长短期记忆网络(LSTM)是一种用于深度学习的人工递归神经网络,能够处理单个数据点或一系列段落。此处引入LSTM的主要目的是推导时间序列的预测结果h_{t}及其对应的隐藏状态。然后,根据对应的隐藏状态,计算其与前一个时间窗口隐藏层之间的权重,并用于校正特征权重矩阵,以捕获更多有用的特征。在本文中,LSTM用于预测不同粒度的频率序列。从原始序列中提取的粒度被输入到LSTM网络中,然后历史数据由注意力网络识别,该网络能够突出历史序列对后续结果的影响。使用LSTM网络允许从原始数据中分析历史时间点和周期性质,并对发现的内部相关性进行建模,使最终结果更加准确。

首先,对于输入矩阵向量,使用LSTM模型接收所有输入值,然后获得隐藏层信息h_{1:T}=[h_{1},...,h_{T}]。之后,预测未来时序向量信息h_{T:T+h}=[h_{T},...,h_{T+h}],最后将它为输入注意力网络分析时序向量关系。

准确的时间预测不仅需要模型能够精确控制外部关系,还需要对数据的内部相关性进行合理分析。本文使用一组长短期记忆网络(LSTMs)层来分析粒度数据。与以前的模型不同,LSTMs并行工作。同时,将卷积神经网络(CNNs)LSTMs分别学习,以便充分利用每个模型的最佳可能结果,然后进行后续的预测任务。对于长短期记忆网络组件,使用传统的LSTM网络,该网络学习数据的不同周期性,然后这里的输入是具有一定时间间隔的时间序列。传统的LSTM利用相邻的X_{t}:X_{t+1}作为模型输入。论文将其输入调整为X_{t}:X_{t+k},以学习不同周期性的关系。此处,k是不同周期的粒度,k的值根据不同的任务场景和数据集而变化,而合理的k值将对结果有正相关影响。本文根据k选择不同的隐藏层,选定的隐藏层肯定是单一时间序列结果。为了使最终结果包含更好的记忆特性,增加了一个注意力层,它选择对当前影响最大的历史数据的时间序列。实现过程如下方程所示:

H_{t},c_{t}=F(h_{t-1-k},c_{t-1-k},x_{t})                                                                                                 (6)

O_{w}=\textup{tahh}(H \times w_{w})                                                                                                               (7)

h_{t}^{G}=X_{T+h}=sum(X \times attscore)attscore = softmax(O_{w} \times w_{o})                             (8)

符号H_{t}代表模型LSTM为后续预测任务输出的结果。w_{w} \in R^{h \times h}代表第一阶段的权重值,h_{t-1}是所表示的LSTM模型的隐藏层维度。第一阶段的权重分配通过矩阵乘法执行,并最终在tanh操作后获得第一阶段的记忆结果。其中O_{w} \in R^{n \times h}是滑动窗口中n值对应的粒度数据的次数,O_{w}w_{0}矩阵相乘,得到第二阶段的权重分配。通过softmax函数获得最终的权重得分attscore \in R^{n \times 1},该权重得分包含对前一个时间点的记忆功能,可以更好地捕捉当前预测时间点的关键时间序列。最终,权重得分被分配到输入时间序列上,并通过求和函数获得最终输出。目标变量挖掘模块的内部相关性处理显示在Algorithm1中。

Algorithm1

特征融合模块:在之前几个模块的处理之后,GNet-LS获取了由三个不同粒度序列生成的三个向量。单个向量是某一粒度的结果,不同的结果代表不同的时间模式。问题在于我们如何关联这三个向量并学习它们之间的关系。为了解决这个问题,使用向量和方法将三个向量合并在一起,然后根据反向传播的思想对每个模型进行参数更新。不同的预测任务依赖于不同的序列。例如,较长的预测任务依赖于较粗的时间序列,较短的预测任务依赖于较细的时间序列。

卷积神经网络(CNNs)递归神经网络(RNNs)更关注组件的非线性特性。为了获得更好的预测结果,GNet-LS结合线性和非线性预测结果。除了上述的非线性组件模块,经典的自回归模型通常被视为线性组件。对于自回归预测结果,可以将其表示为h_{t}^{L} \in R^{D},其中D代表变量的数量。然后,根据以下方程,通过线性层和神经网络模块的融合解决方案获得最终的预测结果。

h_{t}^{L}=\sum_{k=0}^{t-1}W_{k}^{D}X_{t-k}                                                                                                                (9)

F(h_{t}^{O},h_{t}^{G_{2}},h_{t}^{L})=X_{t+h}                                                                                                          (10)

其中W_{k}^{D}代表总共k组权重,每组的大小为D \times 1。这表示每个时间序列X_{t}都有一个线性矩阵W \in R^{D}。线性矩阵代表序列的权重比例。这里,h_{t}^{O}h_{t}^{G_{1}}h_{t}^{G_{2}}h_{t}^{L}分别代表来自外部关系模块、g_{1}的内部相关模块、g_{2}的内部相关模块和线性自回归模块的输出向量。至于F,可以理解为一种算术方法,主要使用拼接和叠加方法,当然也可以选择点积、内积等其他方法,通过F操作返回最终的预测结果。

2 相关代码

STGNN时间序列预测:

STGNN总体架构

step1:模块定义。包含S-GNN层、GRU层、Transformer层、位置编码。

class Transform(nn.Module):
    def __init__(self, outfea, d):
        super(Transform, self).__init__()
        self.qff = nn.Linear(outfea, outfea)
        self.kff = nn.Linear(outfea, outfea)
        self.vff = nn.Linear(outfea, outfea)

        self.ln = nn.LayerNorm(outfea)
        self.lnff = nn.LayerNorm(outfea)

        self.ff = nn.Sequential(
            nn.Linear(outfea, outfea),
            nn.ReLU(),
            nn.Linear(outfea, outfea)
        )

        self.d = d

    def forward(self, x):
        query = self.qff(x)
        key = self.kff(x)
        value = self.vff(x)

        query = torch.cat(torch.split(query, self.d, -1), 0).permute(0, 2, 1, 3)
        key = torch.cat(torch.split(key, self.d, -1), 0).permute(0, 2, 3, 1)
        value = torch.cat(torch.split(value, self.d, -1), 0).permute(0, 2, 1, 3)

        A = torch.matmul(query, key)
        A /= (self.d ** 0.5)
        A = torch.softmax(A, -1)

        value = torch.matmul(A, value)
        value = torch.cat(torch.split(value, x.shape[0], 0), -1).permute(0, 2, 1, 3)
        value += x

        value = self.ln(value)
        x = self.ff(value) + value
        return self.lnff(x)


class PositionalEncoding(nn.Module):
    def __init__(self, outfea, max_len):
        super(PositionalEncoding, self).__init__()

        # Compute the positional encodings once in log space.
        pe = torch.zeros(max_len, outfea).to(device)
        position = torch.arange(0, max_len).unsqueeze(1)
        div_term = torch.exp(torch.arange(0, outfea, 2) *
                             -(math.log(10000.0) / outfea))
        pe[:, 0::2] = torch.sin(position * div_term)
        pe[:, 1::2] = torch.cos(position * div_term)
        pe = pe.unsqueeze(0).unsqueeze(2)  # [1,T,1,F]
        self.register_buffer('pe', pe)

    def forward(self, x):
        x = x + Variable(self.pe,
                         requires_grad=False)
        return x


class SGNN(nn.Module):
    def __init__(self, outfea):
        super(SGNN, self).__init__()
        self.ff = nn.Sequential(
            nn.Linear(outfea, outfea),
            nn.Linear(outfea, outfea)
        )
        self.ff1 = nn.Linear(outfea, outfea)

    def forward(self, x):
        p = self.ff(x)
        a = torch.matmul(p, p.transpose(-1, -2))
        R = torch.relu(torch.softmax(a, -1)) + torch.eye(x.shape[1]).to(device)

        D = (R.sum(-1) ** -0.5)
        D[torch.isinf(D)] = 0.
        D = torch.diag_embed(D)

        A = torch.matmul(torch.matmul(D, R), D)
        x = torch.relu(self.ff1(torch.matmul(A, x)))
        return x


class GRU(nn.Module):
    def __init__(self, outfea):
        super(GRU, self).__init__()
        self.ff = nn.Linear(2 * outfea, 2 * outfea)
        self.zff = nn.Linear(2 * outfea, outfea)
        self.outfea = outfea

    def forward(self, x, xh):
        r, u = torch.split(torch.sigmoid(self.ff(torch.cat([x, xh], -1))), self.outfea, -1)
        z = torch.tanh(self.zff(torch.cat([x, r * xh], -1)))
        x = u * z + (1 - u) * xh
        return x


class STGNNwithGRU(nn.Module):
    def __init__(self, outfea, P):
        super(STGNNwithGRU, self).__init__()
        self.sgnnh = nn.ModuleList([SGNN(outfea) for i in range(P)])
        self.sgnnx = nn.ModuleList([SGNN(outfea) for i in range(P)])
        self.gru = nn.ModuleList([GRU(outfea) for i in range(P)])

    def forward(self, x):
        B, T, N, F = x.shape
        hidden_state = torch.zeros([B, N, F]).to(device)
        output = []

        for i in range(T):
            gx = self.sgnnx[i](x[:, i, :, :])
            gh = hidden_state
            if i != 0:
                gh = self.sgnnh[i](hidden_state)
            hidden_state = self.gru[i](gx, gh)
            output.append(hidden_state)

        output = torch.stack(output, 1)

        return output

step2:STGNN模型定义。

class STGNN(nn.Module):
    def __init__(self, infea, outfea, L, d, P):
        super(STGNN, self).__init__()
        self.start_emb = nn.Linear(infea, outfea)
        self.end_emb = nn.Linear(outfea, infea)

        self.stgnnwithgru = nn.ModuleList([STGNNwithGRU(outfea, P) for i in range(L)])
        self.positional_encoding = PositionalEncoding(outfea, P)
        self.transform = nn.ModuleList([Transform(outfea, d) for i in range(L)])

        self.L = L

    def forward(self, x):
        """
        x:[B,T,N]
        """
        x = x.unsqueeze(-1)
        x = self.start_emb(x)
        for i in range(self.L):
            x = self.stgnnwithgru[i](x)
        x = self.positional_encoding(x)
        for i in range(self.L):
            x = self.transform[i](x)
        x = self.end_emb(x)

        return x.squeeze(-1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1593464.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

回归预测 | Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测&#xff08;完整源码…

通过一篇文章让你了解Linux的重要性

Linux 前言一、什么是Linux后台vs前台为何大多数公司选择使用Linux作为后台服务器 二、Linux的背景介绍UNIX发展的历史Linux发展历史开源官网发行版本DebianUbuntu红帽企业级LinuxCentOSFedoraKali Linux 三、国内企业后台和用户使用Linux现状IT服务器Linux系统应用领域嵌入式L…

容器受到攻击时该如何应对,容器安全给你答案

容器是一个软件包&#xff0c;其中包含在任何操作系统和基础架构上运行所需的所有依赖项&#xff0c;包括代码、配置文件、库和系统工具。每个容器都包含一个运行时环境&#xff0c;使应用程序能够在各种计算环境之间迁移——例如&#xff0c;从物理机迁移到云。 容器提供了许…

【C++类和对象】构造函数与析构函数

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

书生·浦语2.0(InternLM2)大模型实战--Day03 LMDeploy量化部署 | LLMVLM实战

课程视频&#xff1a;https://www.bilibili.com/video/BV1tr421x75B/课程文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/lmdeploy/README.md课程作业&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/lmdeploy/homework.md平台&#xff1a;In…

记一次IP访问MySQL失败多次被自动锁定导致无法连接问题,解决方法一条SQL足以。

&#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru &#x1f525; 系列专栏&#xff1a;《Docker容器化部署系列》 《Java每日面筋》 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 前言 今天下午还在带着耳机摸鱼&#xff…

Acrobat Pro DC 2021---PDF编辑与管理,打造高效PDF工作流程 含Mac+win

Acrobat Pro DC 2021包括全面的PDF编辑、OCR识别、多种输出格式转换以及强大的文件安全性保护。用户可轻松编辑、合并、转换PDF文件&#xff0c;同时支持将扫描文档转换为可编辑的PDF。可将PDF转换为Word、Excel、PowerPoint等格式&#xff0c;提高工作效率。 Mac电脑&#xf…

Java中volatile关键字

保证了不同线程对这个变量进行操作时的可见性&#xff0c;即一个线程修改了某个变量的值&#xff0c;这新值对其他线程来说是立即可见的,volatile关键字会强制将修改的值立即写入主存。 1.volatile的可见性 一个典型的例子&#xff1a;永不停止的循环。 public class Forever…

最前沿・量子退火建模方法(1) : subQUBO讲解和python实现

前言 量子退火机在小规模问题上的效果得到了有效验证&#xff0c;但是由于物理量子比特的大规模制备以及噪声的影响&#xff0c;还没有办法再大规模的场景下应用。 这时候就需要我们思考&#xff0c;如何通过软件的方法怎么样把大的问题分解成小的问题&#xff0c;以便通过现在…

LRUCache原理及源码实现

目录 LRUCache简介&#xff1a; LRUCache的实现&#xff1a; LinkedHashMap方法实现&#xff1a; 自己实现链表&#xff1a; 前言&#xff1a; 有需要本文章源码的友友请前往&#xff1a;LRUCache源码 LRUCache简介&#xff1a; LRU是Least Recently Used的缩写&#xf…

Pixel-GS:用于3D高斯溅射的具有像素感知梯度的密度控制

Pixel-GS: Density Control with Pixel-aware Gradient for 3D Gaussian Splatting Pixel-GS&#xff1a;用于3D高斯溅射的具有像素感知梯度的密度控制 Zheng Zhang  Wenbo Hu†  Yixing Lao   老宜兴市郑张文博胡 † Tong He  Hengshuang Zhao† 赵同和恒双 †1122113311 …

1.open3d处理点云数据的常见方法

1. 点云的读取、可视化、保存 在这里是读取的点云的pcd文件&#xff0c;代码如下&#xff1a; import open3d as o3dif __name__ __main__:#1.点云读取point o3d.io.read_point_cloud("E:\daima\huawei\img\change2.pcd")print(">",point)#2.点云可视…

SpringMVC(一)【入门】

前言 学完了大数据基本组件&#xff0c;SpringMVC 也得了解了解&#xff0c;为的是之后 SpringBoot 能够快速掌握。SpringMVC 可能在大数据工作中用的不多&#xff0c;但是 SSM 毕竟是现在就业必知必会的东西了。SpringBoot 在数仓开发可能会经常用到&#xff0c;所以不废话学吧…

全网最好的JVM总结:有生命周期的JVM

1.编译 1.1 java中编译器有哪些&#xff1f; 前端编译器 javac后台即时编译器 JIT编译器静态提前编译器 &#xff08;一步到位&#xff0c;直接把java编译成二进制&#xff09; 2.2 编译过程是怎么样&#xff1f; 解析与填充符号表&#xff0c;生成语法树 &#xff08;编译…

java学习之路-继承

文章目录 前言 目录 1.1继承的概念 1.2继承有什么好处&#xff0c;为何要继承 1.3继承的语句 1.4父类成员的访问 1.4.1 子类中访问父类的成员变量 1.4.2 子类中访问父类的成员方法 1.5 super关键字 2.子类构造方法 2.1如何创建构造方法 2.2创建构造方法 3.super和this 【相同点…

Centos7 K8S 集群 - kubeadm搭建方式

机器准备 搭建环境是centos7, 四核心4G内存四台机器 一个master节点&#xff0c;一个etcd&#xff0c;两台node 机器名称IP 地址master192.168.1.127node1192.168.1.129node2192.168.1.130node3192.168.1.131 机器时间同步 各节点时间要求精确同步&#xff0c;可以直接联网…

web自动化测试系列-selenium xpath定位方法详解(六)

1.xpath介绍 XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。而html中也应用了这种语言 &#xff0c;所以 &#xff0c;我们定位html页面元素时也会用到xpath这种方法 。 2.xpath定位方式 xpath主要通过以下四种方法定位 &#…

【第二十九篇】BurpSuite杂项综合

文章目录 Intruder模块URL编码Grep检索提取logger日志模块Intruder模块URL编码 假设我们需要对GET请求包中的URL目录进行爆破FUZZ: example.com/xxxx(文件名)Intruder模块会自动对我们的文件名字典进行URL编码 例如payload为1.txt时,burp对其进行URL编码并连接到example.c…

VMware安装Red Hat7.9

1、下载Red Hat Enterprise Linux7.9版本 【百度网盘下载】 链接&#xff1a;https://pan.baidu.com/s/1567NfZRF48PBXfUqxumvDA 提取码&#xff1a;bm7u 2、在虚拟机中创建Red Hat7.9 【点击创建虚拟机】 【自定义高级】 【选择光盘映像安装】 全名自定义即可 【虚拟机命…

Windows环境下删除MySQL

文章目录 一、关闭MySQL服务1、winR打开运行&#xff0c;输入services.msc回车2、服务里找到MySQL并停止 二、卸载MySQL软件1、打开控制模板--卸载程序--卸载MySQL相关的所有组件 三、删除MySQL在物理硬盘上的所有文件1、删除MySQL的安装目录&#xff08;默认在C盘下的Program …