循环神经网络RNN完全解析:从基础理论到PyTorch实战

news2024/9/29 21:21:36

目录

  • 一、循环神经网络全解
    • 1.1 什么是循环神经网络
      • 网络结构
      • 工作原理
      • 数学模型
      • RNN的优缺点
      • 总结
    • 1.2 循环神经网络的工作原理
      • RNN的时间展开
      • 数学表述
      • 信息流动
      • 实现示例
      • 梯度问题:梯度消失和爆炸
      • 总结
    • 1.3 循环神经网络的应用场景
      • 文本分析与生成
        • 1.3.1 自然语言处理
        • 1.3.2 机器翻译
        • 1.3.3 文本生成
      • 语音识别与合成
        • 1.3.4 语音到文本
        • 1.3.5 文本到语音
      • 时间序列分析
        • 1.3.6 股票预测
        • 1.3.7 气象预报
      • 视频分析与生成
        • 1.3.8 动作识别
        • 1.3.9 视频生成
      • 总结
  • 循环神经网络的主要变体
    • 2.1 长短时记忆网络(LSTM)
      • LSTM的结构
        • 2.1.1 遗忘门
        • 2.1.2 输入门
        • 2.1.3 单元状态
        • 2.1.4 输出门
      • 数学表述
      • LSTM的实现示例
      • LSTM的优势和挑战
      • 总结
    • 2.2 门控循环单元(GRU)
      • GRU的结构
        • 2.2.1 重置门
        • 2.2.2 更新门
        • 2.2.3 新的记忆内容
      • 数学表述
      • GRU的实现示例
      • GRU的优势和挑战
      • 总结
    • 2.3 双向循环神经网络(Bi-RNN)
      • Bi-RNN的结构
        • 2.3.1 正向层
        • 2.3.2 反向层
      • 信息合并
      • Bi-RNN的实现示例
      • Bi-RNN的应用
      • Bi-RNN与其他RNN结构的结合
      • 总结
  • 三、从代码实现循环神经网络
    • 3.1 环境准备和数据预处理
      • 3.1.1 环境准备
      • 3.1.2 数据预处理
      • 总结
    • 3.2 使用PyTorch构建RNN模型
      • 3.2.1 定义RNN结构
      • 3.2.2 初始化模型
      • 3.2.3 训练模型
      • 3.2.4 模型评估和保存
      • 总结
  • 三、从代码实现循环神经网络
    • 3.3 训练和评估模型
      • 3.3.1 训练模型
        • 3.3.1.1 训练循环
        • 3.3.1.2 监控训练进度
      • 3.3.2 评估模型
        • 3.3.2.1 验证集评估
        • 3.3.2.2 测试集评估
        • 3.3.2.3 模型指标
      • 3.3.3 超参数调优
      • 总结
  • 四、总结
    • 4.1 循环神经网络(RNN)
    • 4.2 RNN的高级变体
    • 4.3 代码实现
    • 4.4 结语

在本文中,我们深入探讨了循环神经网络(RNN)及其高级变体,包括长短时记忆网络(LSTM)、门控循环单元(GRU)和双向循环神经网络(Bi-RNN)。文章详细介绍了RNN的基本概念、工作原理和应用场景,同时提供了使用PyTorch构建、训练和评估RNN模型的完整代码指南。

作者 TechLead,拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

file

一、循环神经网络全解

1.1 什么是循环神经网络

循环神经网络(Recurrent Neural Network, RNN)是一类具有内部环状连接的人工神经网络,用于处理序列数据。其最大特点是网络中存在着环,使得信息能在网络中进行循环,实现对序列信息的存储和处理。

file

网络结构

RNN的基本结构如下:

# 一个简单的RNN结构示例
class SimpleRNN(nn.Module):
    def __init__(self, input_size, hidden_size):
        super(SimpleRNN, self).__init__()
        self.rnn = nn.RNN(input_size, hidden_size, batch_first=True)
        
    def forward(self, x):
        out, _ = self.rnn(x)
        return out

工作原理

file

  1. 输入层:RNN能够接受一个输入序列(例如文字、股票价格、语音信号等)并将其传递到隐藏层。

  2. 隐藏层:隐藏层之间存在循环连接,使得网络能够维护一个“记忆”状态,这一状态包含了过去的信息。这使得RNN能够理解序列中的上下文信息。

  3. 输出层:RNN可以有一个或多个输出,例如在序列生成任务中,每个时间步都会有一个输出。

数学模型

RNN的工作原理可以通过以下数学方程表示:

  • 输入到隐藏层的转换:[ h_t = \tanh(W_{ih} \cdot x_t + b_{ih} + W_{hh} \cdot h_{t-1} + b_{hh}) ]
  • 隐藏层到输出层的转换:[ y_t = W_{ho} \cdot h_t + b_o ]

其中,( h_t ) 表示在时间 ( t ) 的隐藏层状态,( x_t ) 表示在时间 ( t ) 的输入,( y_t ) 表示在时间 ( t ) 的输出。

RNN的优缺点

优点

  • 能够处理不同长度的序列数据。
  • 能够捕捉序列中的时间依赖关系。

缺点

  • 对长序列的记忆能力较弱,可能出现梯度消失或梯度爆炸问题。
  • 训练可能相对复杂和时间消耗大。

总结

循环神经网络是一种强大的模型,特别适合于处理具有时间依赖性的序列数据。然而,标准RNN通常难以学习长序列中的依赖关系,因此有了更多复杂的变体如LSTM和GRU,来解决这些问题。不过,RNN的基本理念和结构仍然是深度学习中序列处理的核心组成部分。

1.2 循环神经网络的工作原理

循环神经网络(RNN)的工作原理是通过网络中的环状连接捕获序列中的时间依赖关系。下面我们将详细解释其工作机制。

RNN的时间展开

RNN的一个重要特点是可以通过时间展开来理解。这意味着,虽然网络结构在每个时间步看起来相同,但我们可以将其展开为一系列的网络层,每一层对应于序列中的一个特定时间步。

数学表述

file

RNN可以通过下列数学方程描述:

  • 隐藏层状态:[ h_t = \sigma(W_{hh} \cdot h_{t-1} + W_{ih} \cdot x_t + b_h) ]
  • 输出层状态:[ y_t = W_{ho} \cdot h_t + b_o ]

其中,( \sigma ) 是一个激活函数(如tanh或ReLU),( h_t ) 是当前隐藏状态,( x_t ) 是当前输入,( y_t ) 是当前输出。权重和偏置分别由( W_{hh}, W_{ih}, W_{ho} ) 和 ( b_h, b_o ) 表示。

信息流动

file

  1. 输入到隐藏:每个时间步,RNN从输入层接收一个新的输入,并将其与之前的隐藏状态结合起来,以生成新的隐藏状态。

  2. 隐藏到隐藏:隐藏层之间的循环连接使得信息可以在时间步之间传播,从而捕捉序列中的依赖关系。

  3. 隐藏到输出:每个时间步的隐藏状态都会传递到输出层,以生成对应的输出。

实现示例

# RNN的PyTorch实现
import torch.nn as nn

class SimpleRNN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(SimpleRNN, self).__init__()
        self.rnn = nn.RNN(input_size, hidden_size, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)

    def forward(self, x, h_0):
        out, h_n = self.rnn(x, h_0) # 运用RNN层
        out = self.fc(out) # 运用全连接层
        return out

梯度问题:梯度消失和爆炸

由于RNN的循环结构,在训练中可能会出现梯度消失或梯度爆炸的问题。长序列可能会导致训练过程中的梯度变得非常小(消失)或非常大(爆炸),从而影响模型的学习效率。

总结

循环神经网络的工作原理强调了序列数据的时间依赖关系。通过时间展开和信息的连续流动,RNN能够理解和处理序列中的复杂模式。不过,RNN的训练可能受到梯度消失或爆炸的挑战,需要采用适当的技术和结构来克服。

1.3 循环神经网络的应用场景

循环神经网络(RNN)因其在捕获序列数据中的时序依赖性方面的优势,在许多应用场景中都得到了广泛的使用。以下是一些主要应用领域的概述:
file

文本分析与生成

1.3.1 自然语言处理

RNN可用于词性标注、命名实体识别、句子解析等任务。通过捕获文本中的上下文关系,RNN能够理解并处理语言的复杂结构。

1.3.2 机器翻译

RNN能够理解和生成不同语言的句子结构,使其在机器翻译方面特别有效。

1.3.3 文本生成

利用RNN进行文本生成,如生成诗歌、故事等,实现了机器的创造性写作。

语音识别与合成

1.3.4 语音到文本

RNN可以用于将语音信号转换为文字,即语音识别(Speech to Text),理解声音中的时序依赖关系。

1.3.5 文本到语音

RNN也用于文本到语音(Text to Speech)的转换,生成流畅自然的语音。

时间序列分析

1.3.6 股票预测

通过分析历史股票价格和交易量等数据的时间序列,RNN可以用于预测未来的股票走势。

1.3.7 气象预报

RNN通过分析气象数据的时间序列,可以预测未来的天气情况。

视频分析与生成

1.3.8 动作识别

RNN能够分析视频中的时序信息,用于识别人物动作和行为模式等。

1.3.9 视频生成

RNN还可以用于视频内容的生成,如生成具有连续逻辑的动画片段。

总结

RNN的这些应用场景共同反映了其在理解和处理具有时序依赖关系的序列数据方面的强大能力。无论是自然语言处理、语音识别、时间序列分析,还是视频内容分析,RNN都已成为实现这些任务的重要工具。其在捕获长期依赖、理解复杂结构和生成连续序列方面的特性,使其成为深度学习中处理序列问题的首选方法。

循环神经网络的主要变体

2.1 长短时记忆网络(LSTM)

file
file
长短时记忆网络(Long Short-Term Memory,LSTM)是一种特殊的RNN结构,由Hochreiter和Schmidhuber在1997年提出。LSTM旨在解决传统RNN在训练长序列时遇到的梯度消失问题。

LSTM的结构

LSTM的核心是其复杂的记忆单元结构,包括以下组件:

2.1.1 遗忘门

控制哪些信息从单元状态中被丢弃。

2.1.2 输入门

控制新信息的哪些部分要存储在单元状态中。

2.1.3 单元状态

储存过去的信息,通过遗忘门和输入门的调节进行更新。

2.1.4 输出门

控制单元状态的哪些部分要读取和输出。

数学表述

LSTM的工作过程可以通过以下方程表示:

  1. 遗忘门
    [ f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) ]

  2. 输入门
    [ i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) ]

  3. 候选单元状态
    [ \tilde{C}t = \text{tanh}(W_C \cdot [h{t-1}, x_t] + b_C) ]

  4. 更新单元状态
    [ C_t = f_t \cdot C_{t-1} + i_t \cdot \tilde{C}_t ]

  5. 输出门
    [ o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) ]

  6. 隐藏状态
    [ h_t = o_t \cdot \text{tanh}(C_t) ]

其中,( \sigma ) 表示sigmoid激活函数。

LSTM的实现示例

# LSTM的PyTorch实现
import torch.nn as nn

class LSTM(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(LSTM, self).__init__()
        self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)

    def forward(self, x, (h_0, c_0)):
        out, (h_n, c_n) = self.lstm(x, (h_0, c_0)) # 运用LSTM层
        out = self.fc(out) # 运用全连接层
        return out

LSTM的优势和挑战

LSTM通过引入复杂的门控机制解决了梯度消失的问题,使其能够捕获更长的序列依赖关系。然而,LSTM的复杂结构也使其在计算和参数方面相对昂贵。

总结

长短时记忆网络(LSTM)是循环神经网络的重要扩展,具有捕获长序列依赖关系的能力。通过引入门控机制,LSTM可以精细控制信息的流动,既能记住长期的依赖信息,也能忘记无关的细节。这些特性使LSTM在许多序列处理任务中都得到了广泛的应用。

2.2 门控循环单元(GRU)

门控循环单元(Gated Recurrent Unit,GRU)是一种特殊的RNN结构,由Cho等人于2014年提出。GRU与LSTM相似,但其结构更简单,计算效率更高。
file

GRU的结构

GRU通过将忘记和输入门合并,减少了LSTM的复杂性。GRU的结构主要由以下组件构成:

2.2.1 重置门

控制过去的隐藏状态的哪些信息应该被忽略。

2.2.2 更新门

控制隐藏状态的哪些部分应该被更新。

2.2.3 新的记忆内容

计算新的候选隐藏状态,可能会与当前隐藏状态结合。

数学表述

GRU的工作过程可以通过以下方程表示:

  1. 重置门
    [ r_t = \sigma(W_r \cdot [h_{t-1}, x_t] + b_r) ]

  2. 更新门
    [ z_t = \sigma(W_z \cdot [h_{t-1}, x_t] + b_z) ]

  3. 新的记忆内容
    [ \tilde{h}t = \text{tanh}(W \cdot [r_t \odot h{t-1}, x_t] + b) ]

  4. 最终隐藏状态
    [ h_t = (1 - z_t) \cdot h_{t-1} + z_t \cdot \tilde{h}_t ]

其中,( \sigma ) 表示sigmoid激活函数,( \odot ) 表示逐元素乘法。

GRU的实现示例

# GRU的PyTorch实现
import torch.nn as nn

class GRU(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(GRU, self).__init__()
        self.gru = nn.GRU(input_size, hidden_size, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)

    def forward(self, x, h_0):
        out, h_n = self.gru(x, h_0) # 运用GRU层
        out = self.fc(out) # 运用全连接层
        return out

GRU的优势和挑战

GRU提供了与LSTM类似的性能,但结构更简单,因此在计算和参数方面相对更有效率。然而,这种简化可能会在某些任务中牺牲一些表现力。

总结

门控循环单元(GRU)是一种有效的RNN结构,旨在捕获序列数据中的时序依赖关系。与LSTM相比,GRU具有更高的计算效率,同时仍保持了良好的性能。其在许多序列处理任务中的应用,如自然语言处理、语音识别等,进一步证明了其作为一种重要的深度学习工具的地位。

2.3 双向循环神经网络(Bi-RNN)

双向循环神经网络(Bidirectional Recurrent Neural Network,Bi-RNN)是一种能够捕获序列数据前后依赖关系的RNN架构。通过结合正向和反向的信息流,Bi-RNN可以更全面地理解序列中的模式。
file

Bi-RNN的结构

Bi-RNN由两个独立的RNN层组成,一个正向层和一个反向层。这两个层分别处理输入序列的正向和反向版本。

2.3.1 正向层

处理输入序列从第一个元素到最后一个元素。

2.3.2 反向层

处理输入序列从最后一个元素到第一个元素。

信息合并

正向和反向层的隐藏状态通常通过连接或其他合并方式结合在一起,以形成最终的隐藏状态。

Bi-RNN的实现示例

以下代码展示了使用PyTorch构建Bi-RNN的方法:

# Bi-RNN的PyTorch实现
import torch.nn as nn

class BiRNN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(BiRNN, self).__init__()
        self.rnn = nn.RNN(input_size, hidden_size, batch_first=True, bidirectional=True)
        self.fc = nn.Linear(hidden_size * 2, output_size)

    def forward(self, x):
        out, _ = self.rnn(x) # 运用双向RNN层
        out = self.fc(out)  # 运用全连接层
        return out

Bi-RNN的应用

Bi-RNN在许多涉及序列分析的任务中非常有效,例如:

  • 自然语言处理:通过捕获上下文信息,增强了对句子结构的理解。
  • 语音识别:通过分析语音信号的前后依赖关系,提高了识别准确性。

Bi-RNN与其他RNN结构的结合

Bi-RNN可以与其他RNN结构(例如LSTM和GRU)相结合,进一步增强其能力。

总结

双向循环神经网络(Bi-RNN)通过同时分析序列的前向和反向信息,实现了对序列数据更深入的理解。其在诸如自然语言处理和语音识别等复杂任务中的成功应用,显示了Bi-RNN作为一种强大的深度学习模型的潜力和灵活性。

三、从代码实现循环神经网络

3.1 环境准备和数据预处理

为了成功实现循环神经网络,需要首先准备开发环境,并对数据进行适当的预处理。下面将详细介绍每个阶段的步骤。

3.1.1 环境准备

环境准备主要包括选择合适的编程语言、深度学习框架、硬件环境等。

  1. 编程语言:Python是深度学习中广泛使用的语言,有丰富的库和社区支持。
  2. 深度学习框架:PyTorch是一种流行的开源框架,具有强大的灵活性和易用性。
  3. 硬件要求:GPU加速通常可以显著提高训练速度。
# 安装PyTorch
!pip install torch torchvision

3.1.2 数据预处理

数据预处理是机器学习项目中的关键步骤,可以显著影响模型的性能。

  1. 数据加载:首先加载所需的数据集。
  2. 数据清洗:删除或替换缺失、重复或错误的值。
  3. 文本分词:如果是NLP任务,需要对文本进行分词处理。
  4. 序列填充:确保输入序列具有相同的长度。
  5. 归一化:对特征进行标准化处理。
  6. 数据分割:将数据分为训练集、验证集和测试集。

以下是数据预处理的示例代码:

# 用于数据预处理的PyTorch代码
from torch.utils.data import DataLoader
from torchvision import transforms

# 定义转换
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.5], std=[0.5]),
])

# 加载数据集
train_dataset = CustomDataset(transform=transform)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)

总结

环境准备和数据预处理是循环神经网络实现过程中的基础阶段。选择合适的工具和硬件,并对数据进行适当的清洗和转换,是确保项目成功的关键。与此同时,使用合适的数据预处理技术可以显著提高模型的性能和稳定性。通过本节的介绍,读者应能够理解并实现循环神经网络所需的环境准备和数据预处理步骤。

3.2 使用PyTorch构建RNN模型

PyTorch是一种流行的深度学习框架,广泛用于构建和训练神经网络模型。在本节中,我们将介绍如何使用PyTorch构建基本的RNN模型。

3.2.1 定义RNN结构

RNN模型由输入层、隐藏层和输出层组成。以下是构建RNN的代码示例:

import torch.nn as nn

class SimpleRNN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(SimpleRNN, self).__init__()
        self.rnn = nn.RNN(input_size, hidden_size, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        out, _ = self.rnn(x)
        out = self.fc(out)
        return out

这里,input_size表示输入特征的数量,hidden_size表示隐藏层神经元的数量,output_size表示输出层神经元的数量。

3.2.2 初始化模型

初始化模型涉及设置其参数和选择优化器与损失函数。

model = SimpleRNN(input_size=10, hidden_size=20, output_size=1)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
criterion = nn.MSELoss()

3.2.3 训练模型

训练模型包括以下步骤:

  1. 前向传播:通过模型传递输入数据并计算输出。
  2. 计算损失:使用预测输出和实际目标计算损失。
  3. 反向传播:根据损失计算梯度。
  4. 优化器步骤:更新模型权重。
# 训练循环示例
for epoch in range(epochs):
    for batch in train_loader:
        inputs, targets = batch
        outputs = model(inputs)
        loss = criterion(outputs, targets)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

3.2.4 模型评估和保存

通过在验证集或测试集上评估模型,您可以了解其泛化性能。一旦满意,可以保存模型供以后使用。

# 保存模型
torch.save(model.state_dict(), 'model.pth')

总结

使用PyTorch构建RNN模型涉及多个步骤,包括定义模型结构、初始化、训练和评估。本节通过详细的代码示例和解释为读者提供了一个全面的指南,可以用来构建自己的RNN模型。在理解了基本的RNN之后,读者还可以进一步探索更复杂的变体,如LSTM、GRU和双向RNN。

三、从代码实现循环神经网络

file

3.3 训练和评估模型

训练和评估模型是深度学习工作流程的核心部分。本节将详细介绍如何使用PyTorch进行RNN模型的训练和评估。

3.3.1 训练模型

3.3.1.1 训练循环

训练循环是重复的过程,包括前向传播、损失计算、反向传播和优化权重。以下是典型的训练循环代码:

for epoch in range(epochs):
    for batch in train_loader:
        inputs, targets = batch
        outputs = model(inputs)
        loss = criterion(outputs, targets)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    print(f'Epoch {epoch + 1}/{epochs}, Loss: {loss.item()}')

3.3.1.2 监控训练进度

通常使用验证集监控模型的训练进度,并使用如TensorBoard等工具可视化训练和验证损失。

3.3.2 评估模型

3.3.2.1 验证集评估

在验证集上评估模型可以了解模型在未见过的数据上的性能。

model.eval()
with torch.no_grad():
    for batch in val_loader:
        inputs, targets = batch
        outputs = model(inputs)
        val_loss += criterion(outputs, targets).item()
print(f'Validation Loss: {val_loss/len(val_loader)}')

3.3.2.2 测试集评估

在测试集上的评估为您提供了模型在实际应用场景下可能的性能。

3.3.2.3 模型指标

除了损失外,还可以计算其他重要指标,例如准确率、精确度、召回率等。

3.3.3 超参数调优

超参数调优涉及使用诸如Grid Search或Random Search的技术来找到最佳超参数组合。

总结

训练和评估模型是深度学习项目的核心阶段。本节详细介绍了如何使用PyTorch进行训练循环、监控训练进度、评估模型、计算性能指标以及超参数调优。通过了解这些关键概念和技术,读者可以有效地训练和评估RNN模型,为实际应用做好准备。

四、总结

file
在本系列博客中,我们详细探讨了循环神经网络(RNN)的各个方面。以下是重要内容的总结:

4.1 循环神经网络(RNN)

我们介绍了RNN的基本结构和工作原理,以及它如何捕捉序列数据中的时间依赖关系。然后,我们深入了解了各种RNN的应用场景,涵盖了自然语言处理、时间序列分析等领域。

4.2 RNN的高级变体

  • 长短时记忆网络(LSTM):解决了RNN长序列训练中的梯度消失和爆炸问题。
  • 门控循环单元(GRU):与LSTM相似,但结构更简单。
  • 双向循环神经网络(Bi-RNN):通过同时考虑过去和未来的信息,增强了序列建模的能力。

4.3 代码实现

  • 环境准备和数据预处理:介绍了如何准备数据和环境。
  • 使用PyTorch构建RNN模型:详细解释了如何使用PyTorch构建和训练RNN模型。
  • 训练和评估模型:描述了完整的训练和评估流程,包括超参数调优和模型性能评估。

4.4 结语

通过深入了解RNN及其变体、理解它们的工作原理、掌握使用PyTorch进行实现的技巧,读者可以充分利用RNN在复杂序列数据分析方面的强大功能。这种知识不仅可用于当前的项目,还为未来的研究和开发工作奠定了坚实的基础。循环神经网络是深度学习中的一个重要分支,通过不断探索和学习,我们可以继续推动这一领域的创新和进展。

作者 TechLead,拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

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

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

相关文章

大数据:NumPy进阶应用详解

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教…

SAP ABAPG开发屏幕自动生成日期的搜索帮助

代码如下: REPORT z_jason_test_f4 . TABLES: s031. PARAMETER p_spmon TYPE spmon DEFAULT sy-datum0(6) OBLIGATORY. SELECT-OPTIONS s_spmon FOR s031-spmon DEFAULT sy-datum0(6) OBLIGATORY. AT SELECTION-SCREEN ON VALUE-REQUEST…

SDK 自动化测试方案

测试背景 SDK 具有上百个接口,测试场景、测试用例繁多,对于修改某个模块的代码或 SDK 上线前均需要投入大量资源(人力、时间)进行回归验证。目前 QA 资源有限,希望通过梳理 SDK 的功能,尝试使用自动化测试…

【论文阅读】CONAN:一种实用的、高精度、高效的APT实时检测系统(TDSC-2020)

CONAN:A Practical Real-Time APT Detection System With High Accuracy and Efficiency TDSC-2020 浙江大学 Xiong C, Zhu T, Dong W, et al. CONAN: A practical real-time APT detection system with high accuracy and efficiency[J]. IEEE Transactions on Dep…

点破ResNet残差网络的精髓

卷积神经网络在实际训练过程中,不可避免会遇到一个问题:随着网络层数的增加,模型会发生退化。    换句话说,并不是网络层数越多越好,为什么会这样? 不是说网络越深,提取的特征越多&#xff…

登陆接口的的Filter过滤

目录 一、概述 二、基本操作 三、登陆检查接口 一、概述 什么是Filter? Filter表示过滤器,是 JavaWeb三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能 使用了过滤器之后&#xff0…

基于Java+SpringBoot的房源出租信息管理系统【源码+论文+演示视频+包运行成功】

博主介绍:✌csdn特邀作者、博客专家、java领域优质创作者、博客之星,擅长Java、微信小程序、Python、Android等技术,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推…

微信删除的聊天记录怎么恢复?满满干货,建议收藏!

微信的出现逐渐改变了我们的社交方式,它架起了我们与朋友、家人以及同事之间的沟通桥梁,成为我们生活中不可缺失的一部分。 但是总会有那么点意外会发生,比如自己和朋友吵架了,一怒之下将朋友删除,导致所有聊天记录都…

2分钟搭建自己的GPT网站

如果觉得官方免费的gpt(3.5)体验比较差,总是断开,或者不会fanqiang,那你可以自己搭建一个。但前提是你得有gpt apikey。年初注册的还有18美金的额度,4.1号后注册的就没有额度了。不过也可以自己充值。 有了…

ubuntu18.04安装远程控制软件ToDest方法,针对官网指令报错情况

有时我们在家办公,需要控制实验室的笔记本,因此好用的远程控制软件会让我们的工作事半功倍! 常用的远程控制软件有ToDesk,向日葵,以及TeamViewer,但是为感觉ToDesk更流畅一些,所以这里介绍一下…

C++新经典07--auto、头文件防卫、引用与常量

auto的使用 严格来讲,在C语言中,如果某个函数中需要用到一些局部变量,那么局部变量都会集中定义在函数开头,而在C中不必遵循这样的规则,随时用随时定义即可。当然,作用域一般就是从定义的地方开始到该函数…

人工智能引领图文扫描新趋势

1. 背景和影响 近日,中国大学生服务外包创新创业大赛决赛在江南大学圆满落幕。为满足现代服务产业企业的现实需求,本次竞赛内容设计充分聚焦企业发展中所面临的技术、管理等现实问题,与产业的结合度更紧密,智能文字识别技术是大赛…

6款必备的办公软件,个个好用到爆,让你电脑成为真正利器

在现代办公环境中,电脑已经成为我们必不可少的工作工具。而要发挥电脑的最大作用,就需要借助一些优秀的办公软件。下面,就来介绍五款必备的办公软件,它们个个好用到爆,让你的电脑成为真正的利器! 文件快速搜…

性能优越的静电监控系统是怎样的?

随着社会的发展,各种监控系统应运而生。静电监控系统是其中之一。它具有优异的性能和稳定性,能够有效地检测和发现静电。 1:静电监控系统的优势 静电监控系统是一种先进的自动化控制系统,它能够有效地检测和控制企业运营中的各种…

【Java从0到1学习】10 Java常用类汇总

1. System类 System类对读者来说并不陌生,因为在之前所学知识中,需要打印结果时,使用的都是“System.out.println();”语句,这句代码中就使用了System类。System类定义了一些与系统相关的属性和方法,它所提供的属性和…

条码通讯配置

由Leuze(劳易测) LSIS 222 M5M-R1/MA208i系统组成 连接说明及器件明细: 打开条码调试软件BPS Configuration tool对M208i进行ip 和端口号进行配置,条码选择作为客户端,输入ip和端口号,选择串口通讯波特…

基于java校园二手交易平台-lw-源码

二手交易平台论文 源码 文章目录 前言一、主要技术javaMysql数据库JSP技术B/S结构 二、系统设计三、功能截图总结 前言 随着社会的不断发展与进步,人们对信息科学化的认识越来越深入,管理工作的重要性逐渐被认识到。科学化的管理能够实现信息存储的准确…

【O2O领域】Axure外卖订餐骑手端APP原型图,外卖众包配送原型设计图

作品概况 页面数量:共 110 页 兼容软件:Axure RP 9/10,不支持低版本 应用领域:外卖配送、生鲜配送 作品申明:页面内容仅用于功能演示,无实际功能 作品特色 本品为外卖订餐骑手端APP原型设计图&#x…

nodejs+vue+elementui实验室课程预约管理系统 t1g73

通过前面的功能分析可以将实验室课程管理系统的功能分为管理员、学生和教师三个部分,系统的主要功能包括首页、个人中心、教师管理、学生管理、教师课表管理、实验室信息管理、实验课程管理、预约记录管理、实验成绩管理、设备信息管理、借用记录管理、归还记录管理…

解决云服务连接时长过短,不到一会儿自动断开

我们在使用xshell或者FinalShell连接云服务器操作时,总是十分钟就自动断开,很烦, 下面我们设置一下,让他可以使用很长时间(需要有一定的linux命令的基础) cd /etc/ssh 进入到ssh这个目录,查看…