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

批归一化(Batch Normalization)与层归一化(Layer Normalization)的区别与联系

在这里插入图片描述

文章目录

  • 一、Batch normalization 理论与应用
    • 1. 理论解释
    • 2. 数值例子
  • 二、Layer normalization 理论与应用
    • 1. 理论解释
    • 2. 数值例子
  • 三、Layer Normalization 和 Batch Normalization 的区别
  • 四、《Transformers without Normalization》笔记

一、Batch normalization 理论与应用

1. 理论解释

Batch Normalization(批归一化)是一种用于深度学习的优化技术,由Sergey Ioffe和Christian Szegedy在2015年提出。它通过对每一层的输入进行归一化处理,加速训练并提升模型性能。

原理

  1. 归一化:
  • 对每个小批量数据(mini-batch)的每个特征维度进行归一化,使其均值为0,方差为1。
  • 公式为:
    x ^ i = x i − μ B σ B 2 + ϵ \hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} x^i=σB2+ϵ xiμB
    其中, x i x_i xi是输入, μ B \mu_B μB是均值, σ B 2 \sigma_B^2 σB2是方差, ϵ \epsilon ϵ是防止除零的小常数。
  1. 缩放和平移:
  • 归一化后,通过可学习的参数 γ \gamma γ β \beta β进行缩放和平移,恢复数据的表达能力。
  • 公式为:
    y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β
    其中, y i y_i yi是输出, γ \gamma γ β \beta β是可学习参数。

作用

  1. 加速训练:
    • 归一化后的数据分布更稳定,减少了内部协变量偏移,允许使用更高的学习率,加快收敛。
  2. 防止梯度消失/爆炸:
    • 归一化使激活值保持在合理范围内,缓解了梯度消失或爆炸问题。
  3. 正则化效果:
    • 由于使用小批量数据的统计量,引入了噪声,起到轻微的正则化作用,减少过拟合。
  4. 减少对初始化的依赖:
    • 归一化使网络对参数初始化的敏感性降低,简化了调参过程。

实现

在训练时,计算每个小批量的均值和方差;在测试时,使用训练数据的移动平均均值和方差。
代码示例

import torch
import torch.nn as nn# 定义一个带BatchNorm的层
batch_norm = nn.BatchNorm2d(num_features=64)# 输入数据
input_data = torch.randn(32, 64, 128, 128)# 前向传播
output = batch_norm(input_data)
总结
Batch Normalization通过对每层输入进行归一化,加速训练、防止梯度问题、提供正则化效果,并减少对初始化的依赖,是深度学习中的重要技术。

2. 数值例子

通过一个具体的数值例子来说明 Batch Normalization 的计算过程。

假设我们有一个 mini-batch,包含 3 个样本,每个样本有 2 个特征。数据如下:

X = [ 1 2 3 4 5 6 ] X = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \\ \end{bmatrix} X= 135246
其中:

  • 每一行是一个样本。
  • 每一列是一个特征(例如,特征 1 和特征 2)。

Batch Normalization 的计算步骤

  1. 计算每个特征的均值和方差

    Batch Normalization 是对每个特征分别进行归一化的。我们分别计算特征 1 和特征 2 的均值和方差。

  • 特征 1(第一列:1, 3, 5):
    • 均值: μ 1 = 1 + 3 + 5 3 = 3 \mu_1 = \frac{1 + 3 + 5}{3} = 3 μ1=31+3+5=3
    • 方差: σ 1 2 = ( 1 − 3 ) 2 + ( 3 − 3 ) 2 + ( 5 − 3 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_1^2 = \frac{(1-3)^2 + (3-3)^2 + (5-3)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ12=3(13)2+(33)2+(53)2=34+0+4=38
  • 特征 2(第二列:2, 4, 6):
    • 均值: μ 2 = 2 + 4 + 6 3 = 4 \mu_2 = \frac{2 + 4 + 6}{3} = 4 μ2=32+4+6=4
    • 方差: σ 2 2 = ( 2 − 4 ) 2 + ( 4 − 4 ) 2 + ( 6 − 4 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_2^2 = \frac{(2-4)^2 + (4-4)^2 + (6-4)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ22=3(24)2+(44)2+(64)2=34+0+4=38
  1. 归一化

使用均值和方差对每个特征进行归一化。归一化公式为:
x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ
假设 ϵ = 0.0001 \epsilon = 0.0001 ϵ=0.0001(一个很小的常数,防止除零)。

  • 特征 1 的归一化:
    x ^ 1 = 1 − 3 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{1 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.0001 131.63321.225
    x ^ 2 = 3 − 3 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{3 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.0001 331.63300
    x ^ 3 = 5 − 3 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{5 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.0001 531.63321.225

  • 特征 2 的归一化:
    x ^ 1 = 2 − 4 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{2 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.0001 241.63321.225
    x ^ 2 = 4 − 4 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{4 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.0001 441.63300
    x ^ 3 = 6 − 4 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{6 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.0001 641.63321.225

归一化后的数据为:

X ^ = [ − 1.225 − 1.225 0 0 1.225 1.225 ] \hat{X} = \begin{bmatrix} -1.225 & -1.225 \\ 0 & 0 \\ 1.225 & 1.225 \\ \end{bmatrix} X^= 1.22501.2251.22501.225

  1. 缩放和平移

Batch Normalization 还会对归一化后的数据进行缩放和平移,引入可学习的参数 γ \gamma γ β \beta β。假设 γ = [ 1 , 1 ] \gamma = [1, 1] γ=[1,1] β = [ 0 , 0 ] \beta = [0, 0] β=[0,0](初始值),则输出为:

y i = γ ⋅ x ^ i + β y_i = \gamma \cdot \hat{x}_i + \beta yi=γx^i+β

计算后结果与归一化结果相同:

Y = [ − 1.225 − 1.225 0 0 1.225 1.225 ] Y = \begin{bmatrix} -1.225 & -1.225 \\ 0 & 0 \\ 1.225 & 1.225 \\ \end{bmatrix} Y= 1.22501.2251.22501.225

如果 γ = [ 2 , 2 ] \gamma = [2, 2] γ=[2,2] β = [ 1 , 1 ] \beta = [1, 1] β=[1,1],则输出为:

Y = [ − 1.225 × 2 + 1 − 1.225 × 2 + 1 0 × 2 + 1 0 × 2 + 1 1.225 × 2 + 1 1.225 × 2 + 1 ] = [ − 1.45 − 1.45 1 1 3.45 3.45 ] Y = \begin{bmatrix} -1.225 \times 2 + 1 & -1.225 \times 2 + 1 \\ 0 \times 2 + 1 & 0 \times 2 + 1 \\ 1.225 \times 2 + 1 & 1.225 \times 2 + 1 \\ \end{bmatrix} = \begin{bmatrix} -1.45 & -1.45 \\ 1 & 1 \\ 3.45 & 3.45 \\ \end{bmatrix} Y= 1.225×2+10×2+11.225×2+11.225×2+10×2+11.225×2+1 = 1.4513.451.4513.45

小结

  1. 归一化:将数据调整为均值为 0,方差为 1。
  2. 缩放和平移:通过 γ \gamma γ β \beta β 恢复数据的表达能力。
  3. 最终输出:归一化后的数据经过缩放和平移,得到最终的输出。
    通过这个数值例子,可以清楚地看到 Batch Normalization 的计算过程及其作用。

二、Layer normalization 理论与应用

1. 理论解释

Layer Normalization(层归一化)是另一种归一化技术,由 Jimmy Lei Ba 等人在 2016 年提出。它与 Batch Normalization(批归一化)的目标类似,都是为了加速训练并提高模型性能,但它们的归一化方式和应用场景有所不同。

Layer Normalization 的原理

Layer Normalization 是对单个样本的所有特征进行归一化,而不是像 Batch Normalization 那样对整个 mini-batch 的每个特征进行归一化。具体步骤如下:

  1. 计算均值和方差:
  • 对于每个样本,计算其所有特征的均值和方差。
  • 假设输入为 ( x = [ x 1 , x 2 , … , x d ] (x = [x_1, x_2, \dots, x_d] (x=[x1,x2,,xd] d d d是特征维度),则:
    μ = 1 d ∑ i = 1 d x i \mu = \frac{1}{d} \sum_{i=1}^d x_i μ=d1i=1dxi
    σ 2 = 1 d ∑ i = 1 d ( x i − μ ) 2 \sigma^2 = \frac{1}{d} \sum_{i=1}^d (x_i - \mu)^2 σ2=d1i=1d(xiμ)2
  1. 归一化:
  • 使用均值和方差对每个特征进行归一化:
    x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ
    其中, ϵ \epsilon ϵ 是一个很小的常数,用于防止除零。
  1. 缩放和平移:
  • 引入可学习的参数 γ \gamma γ β \beta β,对归一化后的数据进行缩放和平移:
    y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β

Layer Normalization 的特点

  1. 对单个样本操作:
    • Layer Normalization 是对每个样本的所有特征进行归一化,而不是对整个 mini-batch 的每个特征进行归一化。
  2. 适用于变长数据:
    • 由于不依赖于 mini-batch 的大小,Layer Normalization 更适合处理变长数据(如 NLP 中的序列数据)。
  3. 对 mini-batch 大小不敏感:
    • Layer Normalization 的性能不受 mini-batch 大小的影响,即使 batch size 为 1 也能正常工作。

2. 数值例子

通过一个包含多个样本的例子来详细说明 Layer Normalization 的计算过程。

假设我们有一个 mini-batch,包含 2 个样本,每个样本有 3 个特征。数据如下:

X = [ 2 4 6 1 3 5 ] X = \begin{bmatrix} 2 & 4 & 6 \\ 1 & 3 & 5 \\ \end{bmatrix} X=[214365]

其中:

  • 每一行是一个样本。
  • 每一列是一个特征(例如,特征 1、特征 2 和特征 3)。

Layer Normalization 的计算步骤

Layer Normalization 是对每个样本的所有特征进行归一化。因此,我们需要分别对每个样本计算均值和方差,然后进行归一化。

  1. 对第一个样本[2, 4, 6]的计算

    • 计算均值和方差:

      • 均值:
        μ 1 = 2 + 4 + 6 3 = 4 \mu_1 = \frac{2 + 4 + 6}{3} = 4 μ1=32+4+6=4
      • 方差:
        σ 1 2 = ( 2 − 4 ) 2 + ( 4 − 4 ) 2 + ( 6 − 4 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_1^2 = \frac{(2-4)^2 + (4-4)^2 + (6-4)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ12=3(24)2+(44)2+(64)2=34+0+4=38
    • 归一化:
      使用公式:
      x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ
      假设 ϵ = 0.0001 \epsilon = 0.0001 ϵ=0.0001

    • 特征 1:

    x ^ 1 = 2 − 4 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{2 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.0001 241.63321.225

    • 特征 2:
      x ^ 2 = 4 − 4 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{4 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.0001 441.63300
    • 特征 3:
      x ^ 3 = 6 − 4 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{6 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.0001 641.63321.225

    归一化后的第一个样本:
    x ^ 1 = [ − 1.225 , 0 , 1.225 ] \hat{x}_1 = [-1.225, 0, 1.225] x^1=[1.225,0,1.225]

  2. 对第二个样本[1, 3, 5]的计算

    • 计算均值和方差:

      • 均值:
        μ 2 = 1 + 3 + 5 3 = 3 \mu_2 = \frac{1 + 3 + 5}{3} = 3 μ2=31+3+5=3
      • 方差:
        σ 2 2 = ( 1 − 3 ) 2 + ( 3 − 3 ) 2 + ( 5 − 3 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_2^2 = \frac{(1-3)^2 + (3-3)^2 + (5-3)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ22=3(13)2+(33)2+(53)2=34+0+4=38
    • 归一化:

    使用公式:

    x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ

    • 特征 1:
      x ^ 1 = 1 − 3 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{1 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.0001 131.63321.225

    • 特征 2:
      x ^ 2 = 3 − 3 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{3 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.0001 331.63300

    • 特征 3:
      x ^ 3 = 5 − 3 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{5 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.0001 531.63321.225

      归一化后的第二个样本:
      x ^ 2 = [ − 1.225 , 0 , 1.225 ] \hat{x}_2 = [-1.225, 0, 1.225] x^2=[1.225,0,1.225]

  3. 归一化后的结果

    将所有样本的归一化结果组合起来:
    X ^ = [ − 1.225 0 1.225 − 1.225 0 1.225 ] \hat{X} = \begin{bmatrix} -1.225 & 0 & 1.225 \\ -1.225 & 0 & 1.225 \\ \end{bmatrix} X^=[1.2251.225001.2251.225]

  4. 缩放和平移
    Layer Normalization 还会对归一化后的数据进行缩放和平移,引入可学习的参数 γ \gamma γ β \beta β。假设 γ = [ 1 , 1 , 1 ] \gamma = [1, 1, 1] γ=[1,1,1] β = [ 0 , 0 , 0 ] \beta = [0, 0, 0] β=[0,0,0](初始值),则输出为:

    y i = γ ⋅ x ^ i + β y_i = \gamma \cdot \hat{x}_i + \beta yi=γx^i+β

    计算结果与归一化结果相同:

    Y = [ − 1.225 0 1.225 − 1.225 0 1.225 ] Y = \begin{bmatrix} -1.225 & 0 & 1.225 \\ -1.225 & 0 & 1.225 \\ \end{bmatrix} Y=[1.2251.225001.2251.225]

    如果 γ = [ 2 , 2 , 2 ] \gamma = [2, 2, 2] γ=[2,2,2] β = [ 1 , 1 , 1 ] \beta = [1, 1, 1] β=[1,1,1],则输出为:

    Y = [ − 1.225 × 2 + 1 0 × 2 + 1 1.225 × 2 + 1 − 1.225 × 2 + 1 0 × 2 + 1 1.225 × 2 + 1 ] = [ − 1.45 1 3.45 − 1.45 1 3.45 ] Y = \begin{bmatrix} -1.225 \times 2 + 1 & 0 \times 2 + 1 & 1.225 \times 2 + 1 \\ -1.225 \times 2 + 1 & 0 \times 2 + 1 & 1.225 \times 2 + 1 \\ \end{bmatrix} = \begin{bmatrix} -1.45 & 1 & 3.45 \\ -1.45 & 1 & 3.45 \\ \end{bmatrix} Y=[1.225×2+11.225×2+10×2+10×2+11.225×2+11.225×2+1]=[1.451.45113.453.45]


小结

  1. Layer Normalization 是对每个样本的所有特征进行归一化。
  2. 计算步骤包括:
    • 计算每个样本的均值和方差。
    • 归一化。
    • 缩放和平移。
  3. 与 Batch Normalization 不同,Layer Normalization 不依赖于 mini-batch,适合处理变长数据(如 NLP 中的序列数据)。

通过这个包含多个样本的例子,可以清楚地看到 Layer Normalization 的计算过程及其作用。

三、Layer Normalization 和 Batch Normalization 的区别

在这里插入图片描述
代码示例

以下是 PyTorch 中 Layer Normalization 的实现示例:

import torch
import torch.nn as nn# 定义一个 LayerNorm 层
layer_norm = nn.LayerNorm(normalized_shape=64)  # normalized_shape 是特征维度# 输入数据 (batch_size, sequence_length, feature_dim)
input_data = torch.randn(32, 10, 64)  # 假设 batch_size=32, sequence_length=10, feature_dim=64# 前向传播
output = layer_norm(input_data)

总结

  1. Layer Normalization 是对单个样本的所有特征进行归一化,适用于变长数据(如 NLP 中的序列数据)。
  2. Batch Normalization 是对 mini-batch 中每个特征进行归一化,适合固定长度的数据(如图像)。
  3. 两者的主要区别在于归一化的维度和对 mini-batch 的依赖程度。选择哪种归一化方法取决于具体任务和数据特性。

四、《Transformers without Normalization》笔记

paper:https://arxiv.org/pdf/2503.10622

文章的核心思想是tanh代替了归一化层,这是因为作者做实验发现LN的输入输出曲线,很像tanh函数的“S”型曲线:
在这里插入图片描述
tanh(x) 函数可视化:
在这里插入图片描述

∼ O n e p e r s o n g o f a s t e r , a g r o u p o f p e o p l e c a n g o f u r t h e r ∼ \sim_{One\ person\ go\ faster,\ a\ group\ of\ people\ can\ go\ further}\sim One person go faster, a group of people can go further

相关文章:

批归一化(Batch Normalization)与层归一化(Layer Normalization)的区别与联系

文章目录 一、Batch normalization 理论与应用1. 理论解释2. 数值例子 二、Layer normalization 理论与应用1. 理论解释2. 数值例子 三、Layer Normalization 和 Batch Normalization 的区别四、《Transformers without Normalization》笔记 一、Batch normalization 理论与应用…...

12届蓝桥杯—货物摆放

货物摆放 题目描述 小蓝有一个超大的仓库,可以摆放很多货物。 现在,小蓝有 nn 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。 小蓝希望所…...

c++进阶--哈希表的实现

大家好,今天我们来学习ubordered_set和unordered_map的底层哈希表。 目录 哈希表实现 1. 哈希概念 1.1 直接定址法 1.2 哈希冲突 1.3 负载因⼦ 1.4 将关键字转为整数 1.5 哈希函数 下面我们介绍几种哈希函数:1.5.1 除法散列法/除留余数法 1.…...

颠覆传统:SaaS 品牌如何通过 SEO 策略引爆市场!

SaaS 商业模式提供了令人难以置信的可扩展性和盈利能力——但前提是与正确的营销增长策略相结合。 SaaS 品牌知道,托管基于云的应用程序的成本会随着用户量的增加而降低,因此必须专注于订阅者的快速增长,以保持竞争力并降低成本。 许多 CMO…...

【数据库发展史】

数据库的发展历史可以追溯到20世纪50年代,随着计算机技术的进步和数据管理需求的演变,数据库系统经历了多个阶段的变革。以下是数据库技术的主要发展阶段: 1. 前数据库时代(1950年代前) 手工管理:数据通过…...

HTTP 核心知识点整理

1. HTTP 基础 ​定义:HTTP(HyperText Transfer Protocol)是应用层协议,基于 ​请求-响应模型,用于客户端(浏览器)与服务器之间的通信。​特点: ​无状态:每次请求独立&a…...

从AEC-Q100看车规芯片的可靠性设计要点

引言 随着汽车电子化、智能化的飞速发展,汽车电子控制系统对芯片的可靠性提出了极为严苛的要求。AEC-Q100是汽车电子委员会(Automotive Electronics Council)制定的车规级芯片可靠性标准,旨在确保芯片能够在复杂多变的汽车环境中…...

陕西安全员A证考试的报名流程是什么?

陕西安全员 A 证考试报名流程如下: 进入报名系统:登录陕西省建筑工程施工企业安全管理人员及特种作业人员考试报名系统。首次使用需点击 “特种作业人员注册”,进入个人注册界面。注册账号:输入身份证号、登录密码,并…...

特殊行车记录仪DAT视频丢失的恢复方法

行车记录仪是一种常见的车载记录仪,和常见的“小巧玲珑”的行车记录仪不同,一些特种车辆使用的记录仪的外观可以用“笨重”来形容。下边我们来看看特种车载行车记录仪删除文件后的恢复方法。 故障存储: 120GB存储设备/文件系统:exFAT /簇大小:128KB 故…...

PAT乙级1007

常规解法 #include <iostream> using namespace std;// 判断一个数是否为素数的函数 bool isprime(int a) {// 遍历 2 到 sqrt(a) 之间的数&#xff0c;判断 a 是否能被它们整除for (int i 2; i * i < a; i) {if (a % i 0) // 如果能整除&#xff0c;说明 a 不是素…...

数据库中不存在该字段

mybatisplus 定义的类中某些字段是数据库里面没有的&#xff0c;我们可用tablefield(existfalse)来注解&#xff0c;演示如下&#xff1a;...

吾爱出品,文件分类助手,高效管理您的 PC 资源库

在日常使用电脑的过程中&#xff0c;文件杂乱无章常常让人感到困扰。无论是桌面堆积如山的快捷方式&#xff0c;还是硬盘中混乱的音频、视频、文档等资源&#xff0c;都急需一种高效的整理方法。文件分类助手应运而生&#xff0c;它是一款文件管理工具&#xff0c;能够快速、智…...

关于瑞芯微开发工具(RKDevTool)刷机下载Boot失败原因的研究

昨天发了文章《网心云OEC/OEC-turbo刷机问题——刷机教程、救砖方法、技术要点及下载boot失败异常解决尝试》&#xff0c;其中有关于刷机各种问题的一些解决方法。 网心云OEC/OEC-turbo刷机问题——刷机教程、救砖方法、技术要点及下载boot失败异常解决尝试-CSDN博客文章浏览阅…...

web爬虫笔记:js逆向案例十一 某数cookie(补环境流程)

web爬虫笔记:js逆向案例十一 某数cookie(补环境流程) 一、获取网页数据请求流程 二、目标网址、cookie生成(逐步分析) 1、目标网址:aHR0cHM6Ly9zdWdoLnN6dS5lZHUuY24vSHRtbC9OZXdzL0NvbHVtbnMvNy9JbmRleC5odG1s 2、快速定位入口方法 1、通过脚本监听、hook_cookie等操作可…...

浅谈 Vue3 中的设计模式

设计模式是软件开发中的一种最佳实践&#xff0c;它提供了解决特定问题的通用解决方案。通过合理运用设计模式&#xff0c;可以提高代码的可维护性、可扩展性和可读性。在 Vue3 的源码中&#xff0c;设计模式被广泛应用于各个模块中&#xff0c;充分体现了其在现代前端框架中的…...

Unix Domain Socket、IPC、RPC与gRPC的深度解析与实战

Unix Domain Socket、IPC、RPC与gRPC的深度解析与实战 引言 在分布式系统和本地服务通信中&#xff0c;进程间通信&#xff08;IPC&#xff09;与远程过程调用&#xff08;RPC&#xff09;是核心能力。本文将深入剖析 Unix Domain Socket&#xff08;UDS&#xff09;、IPC、RP…...

07_JavaScript函数作用域_递归

目录 一、作用域&#xff08;重点&#xff09; 二、变量的使用规则 &#xff08;重点&#xff09; 2.1 访问规则 2.2 赋值规则 三、递归函数 &#xff08;难点&#xff09; 了解 四、对象 4.1 对象的创建 一、作用域&#xff08;重点&#xff09; 什么是作用域 ? 作用…...

.gitignore使用指南

.gitignore使用指南 目录 什么是.gitignore为什么需要.gitignore如何创建.gitignore文件.gitignore文件的语法规则 忽略单个文件忽略目录忽略特定类型的文件不忽略特定文件或目录递归匹配 示例.gitignore文件注意事项更多特殊场景匹配规则 忽略多个特定后缀的文件忽略特定目录…...

Excel多级联动下拉菜单的自动化设置(使用Python中的openpyxl模块)

1 主要目的 在Excel中&#xff0c;经常会遇到需要制作多级联动下拉菜单的情况&#xff0c;要求单元格内填写的内容只能从指定的多个选项中进行选择&#xff0c;并且需要设置多级目录&#xff0c;其中下级目录的选项内容要根据上级目录的填写内容确定&#xff0c;如下图所示&am…...

深入解析 Spring Framework 5.1.8.RELEASE 的源码目录结构

深入解析 Spring Framework 5.1.8.RELEASE 的源码目录结构 1. 引言 Spring Framework 是 Java 领域最流行的企业级开发框架之一&#xff0c;广泛用于 Web 开发、微服务架构、数据访问等场景。本文将深入解析 Spring Framework 5.1.8.RELEASE 的源码目录结构&#xff0c;帮助开…...

excalidraw画图工具——背景画布有无格子设置

服啦找了大半天&#xff0c;愣是没找到 toggle grid &#xff1a; 切换格子… Excalidraw的背景格子 只要右键&#xff0c;将这个勾取消就好了&#xff1f;...

计算机组成原理———I\O系统精讲<1>

本篇文章主要介绍输入输出系统的发展概况 一.输入输出系统的发展概况 1.早期阶段 该阶段的特点是I/O设备与主存交换信息都必须通过CPU 当时的I/O设备有如下几个特点&#xff1a; &#xff08;1&#xff09;每个I\O设备都必须配有一套独立的逻辑电路与CPU相连&#xff0c;用来…...

[数据结构] 动态顺序表应用

可扩容顺序表顺序表 SeqList.hSeqList.cTest.c 动态顺序表能够根据数据存储的需要动态地管理内存空间。 SeqList.h #include<stdio.h> #include<stdlib.h>//静态顺序表 //小了不够用&#xff0c;多了浪费 //#define N 10 //typedef int SLDatatype; //struct SeqL…...

MinIO-对象存储方案

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。 MinIO是一个非常轻量的服务…...

装饰器模式 (Decorator Pattern)

装饰器模式 (Decorator Pattern) 是一种结构型设计模式,它动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活。 一、基础 1 意图 动态地给一个对象添加一些额外的职责。 就增加功能来说,装饰器模式相比生成子类更为灵活。 2 适用场景 当…...

手动配置树莓派wifi联网连接热点手机热点

手动配置树莓派wifi联网连接热点 修改wifi配置文件: 运行命令: sudo nano /etc/wpa_supplicant/wpa_supplicant.conf 在文件中添加无线网配置信息: ctrl_interfaceDIR/var/run/wpa_supplicant GROUPnetdev update_config1 countryCN network{ ssid”你的无线网名字” psk”…...

【学习笔记】麦肯锡《超级智能体:赋能人们释放人工智能的全部潜力》

麦肯锡《超级智能体&#xff1a;赋能人们释放人工智能的全部潜力》报告的学习笔记&#xff1a; 报告背景与意义 • 科技发展趋势&#xff1a;随着人工智能技术的飞速发展&#xff0c;其在各行业的应用逐渐深入&#xff0c;麦肯锡的这份报告正是基于这一背景&#xff0c;旨在深入…...

ENSP学习day9

ACL访问控制列表实验 ACL&#xff08;Access Control List&#xff0c;访问控制列表&#xff09;是一种用于控制用户或系统对资源&#xff08;如文件、文件夹、网络等&#xff09;访问权限的机制。通过ACL&#xff0c;系统管理员可以定义哪些用户或系统可以访问特定资源&#x…...

文章记单词 | 第2篇(六级)

一&#xff0c;单词释义 story&#xff1a;名词&#xff08;n.&#xff09;故事&#xff1b;小说&#xff1b;&#xff08;真实情况的&#xff09;叙述&#xff0c;描述&#xff1b;楼层&#xff08;美语写法&#xff0c;英式英语为 storey&#xff09;stress&#xff1a;名词…...

【C++动态规划 数学】1039. 多边形三角剖分的最低得分|2130

本文涉及知识点 C动态规划 数学 LeetCode1039. 多边形三角剖分的最低得分 你有一个凸的 n 边形&#xff0c;其每个顶点都有一个整数值。给定一个整数数组 values &#xff0c;其中 values[i] 是第 i 个顶点的值&#xff08;即 顺时针顺序 &#xff09;。 假设将多边形 剖分 …...