《深度学习实战》第3集:循环神经网络(RNN)与序列建模
第3集:循环神经网络(RNN)与序列建模
引言
在深度学习领域,处理序列数据(如文本、语音、时间序列等)是一个重要的研究方向。传统的全连接网络和卷积神经网络(CNN)难以直接捕捉序列中的时序依赖关系,而循环神经网络(Recurrent Neural Network, RNN)应运而生。它通过引入“记忆”机制,能够有效建模序列数据的动态特性。然而,随着任务复杂度的提升,RNN 的局限性也逐渐显现,这促使了 LSTM 和 GRU 等改进模型的诞生。本集将深入探讨 RNN 的基本原理及其改进版本,并结合实战项目展示其应用价值。最后,我们还将讨论 Transformer 如何逐步取代 RNN 成为序列建模的新宠。
1. RNN 的基本原理与局限性
1.1 什么是 RNN?
RNN(Recurrent Neural Network)是一类适合处理序列数据的神经网络。与传统的前馈神经网络不同,RNN具有循环结构,可以将前一个时刻的信息传递到当前时刻,从而记忆序列中的历史信息。
RNN的工作原理:
- 在每个时间步,RNN通过接收当前输入和上一时刻的隐藏状态,更新当前的隐藏状态,并计算当前的输出。
- 这种结构允许RNN处理具有时序依赖关系的数据,如语音、文本和时间序列。
基本原理
RNN 的核心思想是通过一个循环结构,将当前时刻的输入与上一时刻的隐藏状态结合起来,从而实现对序列信息的记忆。具体来说,RNN 的计算公式如下:
h t = σ ( W h h t − 1 + W x x t + b ) h_t = \sigma(W_h h_{t-1} + W_x x_t + b) ht=σ(Whht−1+Wxxt+b)
其中:
- h t 是当前时刻的隐藏状态; h_t 是当前时刻的隐藏状态; ht是当前时刻的隐藏状态;
- x t 是当前时刻的输入; x_t 是当前时刻的输入; xt是当前时刻的输入;
- W h 和 W x 是权重矩阵; W_h 和 W_x 是权重矩阵; Wh和Wx是权重矩阵;
- b 是偏置项; b 是偏置项; b是偏置项;
- σ 是激活函数(通常为 t a n h 或 R e L U )。 \sigma 是激活函数(通常为 tanh 或 ReLU)。 σ是激活函数(通常为tanh或ReLU)。
通过这种递归计算,RNN 能够捕捉序列中的时序依赖关系。
局限性
尽管 RNN 在理论上可以处理任意长度的序列,但在实际训练中存在以下问题:
- 梯度消失/爆炸问题:由于反向传播过程中梯度需要通过时间维度传递,长序列会导致梯度指数级缩小或放大。当序列较长时,RNN的梯度容易在反向传播过程中消失或爆炸,使得模型难以学习长期依赖关系
- 长期依赖问题:RNN 难以记住距离较远的信息,因为隐藏状态会随着时间被覆盖或遗忘。RNN在捕捉较长时间依赖时效果较差,尤其是在长序列中,它无法保持足够的信息。
这些问题限制了 RNN 在复杂任务中的表现。
1.2 LSTM 和 GRU 的改进
为了克服 RNN 的局限性,研究者提出了两种改进模型:LSTM(Long Short-Term Memory)长短期记忆网络和 GRU(Gated Recurrent Unit)门控循环单元。它们通过引入门控机制,增强了模型对长期依赖的建模能力。
- LSTM(长短期记忆网络)

LSTM通过引入“记忆单元”和“门控机制”来控制信息流动,克服了传统RNN在长时间序列建模中的不足。LSTM的核心组件包括:
- 遗忘门:决定当前时间步的记忆单元中哪些信息需要遗忘。
- 输入门:控制当前时间步的输入信息如何更新到记忆单元中。
- 输出门:控制记忆单元的信息如何影响输出。
通过这些门控机制,LSTM能够有效地保持长期依赖信息,避免梯度消失问题。
- GRU(门控循环单元)

GRU是LSTM的简化版本,它将LSTM中的遗忘门和输入门合并为一个更新门,减少了参数量,使得训练更加高效。GRU的结构较LSTM更为简单,但在很多任务上,GRU与LSTM的表现相差不大。
LSTM 公式解释
LSTM 引入了三个门(输入门、遗忘门、输出门)以及一个细胞状态(cell state),用于控制信息的流动。其核心公式如下:
-
遗忘门:决定哪些信息需要从细胞状态中丢弃。
f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) ft=σ(Wf⋅[ht−1,xt]+bf) -
输入门:决定哪些新信息需要添加到细胞状态中。
i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) it=σ(Wi⋅[ht−1,xt]+bi)
C ~ t = tanh ( W C ⋅ [ h t − 1 , x t ] + b C ) \tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C) C~t=tanh(WC⋅[ht−1,xt]+bC) -
更新细胞状态:
C t = f t ⊙ C t − 1 + i t ⊙ C ~ t C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t Ct=ft⊙Ct−1+it⊙C~t -
输出门:决定当前时刻的隐藏状态。
o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) ot=σ(Wo⋅[ht−1,xt]+bo)
h t = o t ⊙ tanh ( C t ) h_t = o_t \odot \tanh(C_t) ht=ot⊙tanh(Ct)
GRU公式解释
GRU 是 LSTM 的简化版本,将遗忘门和输入门合并为更新门,并移除了单独的细胞状态。其核心公式如下:
-
更新门:
z t = σ ( W z ⋅ [ h t − 1 , x t ] + b z ) z_t = \sigma(W_z \cdot [h_{t-1}, x_t] + b_z) zt=σ(Wz⋅[ht−1,xt]+bz) -
重置门:
r t = σ ( W r ⋅ [ h t − 1 , x t ] + b r ) r_t = \sigma(W_r \cdot [h_{t-1}, x_t] + b_r) rt=σ(Wr⋅[ht−1,xt]+br) -
候选隐藏状态:
h ~ t = tanh ( W ⋅ [ r t ⊙ h t − 1 , x t ] + b ) \tilde{h}_t = \tanh(W \cdot [r_t \odot h_{t-1}, x_t] + b) h~t=tanh(W⋅[rt⊙ht−1,xt]+b) -
最终隐藏状态:
h t = ( 1 − z t ) ⊙ h t − 1 + z t ⊙ h ~ t h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t ht=(1−zt)⊙ht−1+zt⊙h~t
LSTM 和 GRU 的门控机制使得它们能够更好地捕捉长期依赖关系,同时缓解了梯度消失问题。
1.3 序列建模的应用场景
RNN 及其变体广泛应用于以下领域:
- 语言建模:语言建模是自然语言处理中的一个重要任务,目标是根据前文的单词预测下一个单词。RNN、LSTM和GRU在语言建模中表现优异,能够捕捉句子中各个单词之间的时序依赖关系,可预测下一个单词的概率分布,常用于机器翻译、文本生成等任务。
- 时间序列预测:时间序列预测是使用历史数据预测未来的一个典型应用场景。例如,在股票市场中,我们希望基于历史价格数据预测未来的股价趋势。RNN、LSTM和GRU被广泛应用于金融领域的时间序列预测任务,也常用于天气预测等领域。
- 语音识别:将音频信号转化为文本。
- 视频分析:捕捉视频帧之间的时序关系。
2. 实战项目:使用 LSTM 预测股票价格趋势
2.1 项目背景
我们将使用LSTM模型来预测股票价格趋势。数据来源于Yahoo Finance,我们将使用过去的股票数据来预测未来几天的股票价格变化。
2.2 数据准备
首先,安装所需的库:
pip install yfinance pandas numpy matplotlib tensorflow scikit-learn
接着,获取股票数据并进行预处理:
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler# 获取股票数据
data = yf.download('AAPL', start='2010-01-01', end='2023-01-01', auto_adjust=True)# 使用收盘价
closing_prices = data['Close'].values.reshape(-1, 1)# 数据归一化
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(closing_prices)# 创建训练数据(使用过去60天的数据预测下一天的价格)
def create_dataset(data, time_step=60):X, y = [], []for i in range(len(data)-time_step-1):X.append(data[i:(i+time_step), 0])y.append(data[i + time_step, 0])return np.array(X), np.array(y)X, y = create_dataset(scaled_data)# 重塑输入数据的形状为 [样本数, 时间步长, 特征数]
X = X.reshape(X.shape[0], X.shape[1], 1)# 划分训练集和测试集
train_size = int(len(X) * 0.8)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]
2.3 构建LSTM模型
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout# 构建LSTM模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(units=1))# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')# 训练模型
model.fit(X_train, y_train, epochs=10, batch_size=32)
2.4 预测与可视化
# 使用模型进行预测
predictions = model.predict(X_test)# 反归一化预测结果
predictions = scaler.inverse_transform(predictions)
y_test = scaler.inverse_transform(y_test.reshape(-1, 1))# 可视化结果
plt.figure(figsize=(12, 6))
plt.plot(y_test, color='blue', label='Actual Stock Price')
plt.plot(predictions, color='red', label='Predicted Stock Price')
plt.title('Stock Price Prediction using LSTM')
plt.xlabel('Time')
plt.ylabel('Stock Price')
plt.legend()
plt.show()
** 代码汇总:**
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler# 获取股票数据
data = yf.download('AAPL', start='2010-01-01', end='2023-01-01', auto_adjust=True)if data.empty:print("No data found, check the stock symbol or try again later.")
else:# 使用收盘价closing_prices = data['Close'].values.reshape(-1, 1)# 数据归一化scaler = MinMaxScaler(feature_range=(0, 1))scaled_data = scaler.fit_transform(closing_prices)# 创建训练数据(使用过去60天的数据预测下一天的价格)def create_dataset(data, time_step=60):X, y = [], []for i in range(len(data)-time_step-1):X.append(data[i:(i+time_step), 0])y.append(data[i + time_step, 0])return np.array(X), np.array(y)X, y = create_dataset(scaled_data)# 重塑输入数据的形状为 [样本数, 时间步长, 特征数]X = X.reshape(X.shape[0], X.shape[1], 1)# 划分训练集和测试集train_size = int(len(X) * 0.8)X_train, X_test = X[:train_size], X[train_size:]y_train, y_test = y[:train_size], y[train_size:]from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import LSTM, Dense, Dropout# 构建LSTM模型model = Sequential()model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))model.add(Dropout(0.2))model.add(LSTM(units=50, return_sequences=False))model.add(Dropout(0.2))model.add(Dense(units=1))# 编译模型model.compile(optimizer='adam', loss='mean_squared_error')# 训练模型model.fit(X_train, y_train, epochs=10, batch_size=32)# 使用模型进行预测predictions = model.predict(X_test)# 反归一化预测结果predictions = scaler.inverse_transform(predictions)y_test = scaler.inverse_transform(y_test.reshape(-1, 1))# 可视化结果plt.figure(figsize=(12, 6))plt.plot(y_test, color='blue', label='Actual Stock Price')plt.plot(predictions, color='red', label='Predicted Stock Price')plt.title('Stock Price Prediction using LSTM')plt.xlabel('Time')plt.ylabel('Stock Price')plt.legend()plt.show()
代码输出结果:
[*********************100%***********************] 1 of 1 completed
2025-02-25 22:43:23.883004: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2025-02-25 22:43:26.821365: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2025-02-25 22:43:29.733373: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
D:\python_projects\lstm_demo\Lib\site-packages\keras\src\layers\rnn\rnn.py:200: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.super().__init__(**kwargs)
Epoch 1/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 4s 19ms/step - loss: 0.0037
Epoch 2/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 3.0320e-04
Epoch 3/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 2.5178e-04
Epoch 4/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 2.8054e-04
Epoch 5/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 2.1884e-04
Epoch 6/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 1.9784e-04
Epoch 7/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 1.7942e-04
Epoch 8/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 1.9470e-04
Epoch 9/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 1.5350e-04
Epoch 10/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 2.8230e-04
21/21 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step
输出预测对比图片:

2.5 图解RNN和LSTM
-
RNN 展开图


-
LSTM 单元结构
( LSTM 单元结构图,标注输入门、遗忘门、输出门和细胞状态。)

3. 前沿关联:Transformer 在序列建模中的崛起
尽管LSTM和GRU在序列建模中取得了显著成果,但随着Transformer模型的出现,序列建模的格局发生了变化。Transformer模型通过自注意力机制能够并行处理序列数据,且在处理长距离依赖时更加高效。如今,Transformer模型已广泛应用于自然语言处理任务,如BERT和GPT系列模型。Transformer 模型凭借其自注意力机制(Self-Attention)彻底改变了序列建模领域。相比于 RNN,Transformer 具有以下优势:
- 并行化训练:无需按时间顺序处理序列,大幅提高了训练效率。
- 长程依赖建模:自注意力机制能够直接捕捉全局依赖关系。
- 广泛应用:Transformer 已成为 GPT、BERT 等大模型的核心架构。
尽管如此,RNN 仍然在某些特定任务(如实时序列处理)中具有不可替代的价值。理解 RNN 的原理及其改进版本,有助于我们更好地掌握现代深度学习技术的发展脉络。
总结
本集聚焦于循环神经网络(RNN)的基本原理及其改进模型 LSTM 和 GRU,并通过实战项目展示了它们在时间序列预测中的应用。同时,我们也探讨了 Transformer 的崛起如何推动序列建模进入新时代。下一集,我们将深入探讨 Transformer 的工作原理及其在自然语言处理中的革命性应用。敬请期待!
相关文章:
《深度学习实战》第3集:循环神经网络(RNN)与序列建模
第3集:循环神经网络(RNN)与序列建模 引言 在深度学习领域,处理序列数据(如文本、语音、时间序列等)是一个重要的研究方向。传统的全连接网络和卷积神经网络(CNN)难以直接捕捉序列中…...
winfrom的progressBar 鼠标移上去显示 进度条的时间
需求描述: 播放IPC摄像头(海康、大华)的录像回放,视频窗口下方有个进度条,能显示当前录像播放的进度,点击进度条能将视频跳转到指定的时间点继续播放... 现在需要再进度条上显示视频的时间,用来…...
如何在WordPress网站中查看移动版本—快速预览与自定义设置
在WordPress网站的构建过程中,确保网站在移动端的显示效果至关重要。毕竟,随着越来越多的用户通过手机访问互联网,一个优化良好的移动版网站将直接影响用户的留存率和访问体验。 如果你是WordPress网站的所有者,本文将向你介绍如…...
wordpress按分类ID调用最新、推荐、随机内容
在WordPress中,可以通过自定义查询(WP_Query)来按分类ID调用最新、推荐(自定义字段或标签)、随机内容。以下是一些示例代码,帮助你实现这些功能。 1. 按分类ID调用最新内容 以下代码可以调用指定分类ID下的最新文章: <?php // 设置分类…...
excel单、双字节字符转换函数(中英文输入法符号转换)
在Excel中通常使用函数WIDECHAR和ASC来实现单、双字节字符之间的转换。其中 WIDECHAR函数将所有的字符转换为双字节,ASC函数将所有的字符转换为单字节 首先来解释一下单双字节的含义。单字节一般对应英文输入法的输入,如英文字母,英文输入法…...
能不能用Ai来开发出一款APP?很早就想过能不能用Ai来开发出一款APP?
现在AI这么流行,长青很早就想过能不能用Ai来开发出一款APP? 然后从1月份开始长青就开始着手用AI写一款音乐app,参考了落雪音乐的开发技术栈,长青这里也准备用ReactNative去写。 首先声明一点,长青本身不会开发app的&a…...
lattice hdl实现spi接口
在lattice工具链中实现SPI接口通常涉及以下步骤: 定义硬件SPI接口的管脚。配置SPI时钟和模式。编写SPI主机或从机的控制逻辑。 展示了如何在Lattice工具链中使用HDL语言(例如Verilog)来配置SPI接口: lattice工程 顶层:spi_slave_top.v `timescale 1ns/ 1ps module spi_…...
超过DeepSeek、o3,Claude发布全球首个混合推理模型,并将完成新一轮35亿美元融资...
Anthropic于2025年2月25日发布全球首个“混合推理”AI模型Claude 3.7 Sonnet,并在融资层面取得重大进展,计划完成35亿美元的新一轮融资,估值将达615亿美元。以下是核心信息整理: 技术突破:双思维模型与代码能力 1. 混合…...
AI如何通过大数据分析提升制造效率和决策智能化
人工智能(AI)与大数据技术的融合,不仅重新定义了生产流程,更让企业实现了从“经验驱动”到“数据智能驱动”的跨越式升级。 从“模糊经验”到“精准洞察” 传统制造业依赖人工经验制定生产计划,但面对复杂多变的市…...
Java和JavaScript的比较
语言类型: java:面相对象的编程语言,属于强类型; javascript:基于对象的脚本语言,属于弱类型; 用途: java:适合用于后端开发,Android应用开发,…...
2. 在Linux 当中安装 Nginx(13步) 下载安装启动(详细说明+附加详细截图说明)
2. 在Linux 当中安装 Nginx(13步) 下载&安装&启动(详细说明附加详细截图说明) 文章目录 2. 在Linux 当中安装 Nginx(13步) 下载&安装&启动(详细说明附加详细截图说明)1. 在 Linxu 下安装 Nginx 的详细步骤2. 最后: 1. 在 Linxu 下安装 Nginx 的详细…...
大模型训练——pycharm连接实验室服务器
一、引言 我们在运行或者复现大佬论文代码的时候,笔记本的算力不够,需要使用实验室的服务器进行运行。可以直接在服务器的终端上执行,但是这样的话代码调试就不方便。而我们可以使用 pycharm 连接到服务器,既方便了代码调试&…...
实体机器人识别虚拟环境中障碍物
之前的内容已经实现了虚拟机器人识别实体机器人的功能,接下来就是实体机器人如何识别虚拟环境中的障碍物(包括虚拟环境中的障碍物和其他虚拟机器人)。 我做的是基于雷达的,所以主要要处理的是雷达的scan话题 我的虚拟机器人命名…...
修改`FSL Yocto Project Community BSP`用到的u-boot源码,使其能适配百问网(100ask)的开发板
前言 在博文 https://blog.csdn.net/wenhao_ir/article/details/145547974 中,我们利用官方提供的BSP(FSL Yocto Project Community BSP)构建了写到SD卡中的完整镜像,然后启动后发现存在不少问题,首要的问题就是u-boot不能识别网卡,在这篇博文中,我们就找到FSL Yocto Pro…...
Rk3568驱动开发_点亮led灯(手动挡)_5
1.MMU简介 完成虚拟空间到物理空间的映射 内存保护设立存储器的访问权限,设置虚拟存储空间的缓冲特性 stm32点灯可以直接操作寄存器,但是linux点灯不能直接访问寄存器,linux会使能mmu linux中操作的都是虚拟地址,要想访问物理地…...
十、大数据资源平台功能架构
一、大数据资源平台的功能架构图总体结构 大数据资源平台功能架构图 关键组件: 1.用户(顶行) 此部分标识与平台交互的各种利益相关者。 其中包括: 市领导 各部门分析师 区政府 外部组织 公民 开发人员 运营经理 2.功能模…...
LabVIEW不规则正弦波波峰波谷检测
在处理不规则正弦波信号时,准确检测波峰和波谷是分析和处理信号的关键任务。特别是在实验数据、传感器信号或其他非理想波形中,波峰和波谷的位置可以提供有价值的信息。然而,由于噪声干扰、信号畸变以及不规则性,波峰波谷的检测变…...
分布式主键生成服务
目录 一、使用线程安全的类——AtomicInteger或者AtomicLong 二、主键生成最简单写法(不推荐) 三、主键生成方法一:Long型id生成——雪花算法 四、主键生成方法二:流水号 (一)流水号概述 (二)添加配置 1.pom.xml 2.application.properties 3.创…...
如何通过网管提升运维效率?
网络系统在企业信息化系统扮演着越来越重要的作用,网络规模不断扩大,网络结构越来越复杂,传统的运维方式已经难以满足高效、稳定运行的要求。网管系统作为IT运维的重要工具,能够帮助企业实现网络的智能化管理,显著提升…...
(python)Arrow库使时间处理变得更简单
前言 Arrow库并不是简单的二次开发,而是在datetime的基础上进行了扩展和增强。它通过提供更简洁的API、强大的时区支持、丰富的格式化和解析功能以及人性化的显示,填补了datetime在某些功能上的空白。如果你需要更高效、更人性化的日期时间处理方式,Arrow库是一个不错的选择…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
