11.26 深度学习-初始化

深度学习 的过程是不知道用什么分类算法的 让他自己算

传入一组 数据(可以是外界可以是其他神经元) 加权求和 结果传入激活函数 激活函数输出 数据 这个数据可能需要满足一些条件

- 输入(Inputs): 代表输入数据,通常用向量表示,每个输入值对应一个权重。 x

- 权重(Weights): 每个输入数据都有一个权重,表示该输入对最终结果的重要性。w

- 偏置(Bias): 一个额外的可调参数,作用类似于线性方程中的截距,帮助调整模型的输出。b

- 加权求和: 神经元将输入乘以对应的权重后求和,再加上偏置。 x@w+b

- 激活函数(Activation Function): 用于将加权求和后的结果转换为输出结果,**引入非线性特性,使神经网络能够处理复杂的任务**。常见的激活函数有Sigmoid、ReLU(Rectified Linear Unit)、Tanh等。f(x@w+b)

#神经网络是由大量人工神经元按层次结构连接而成的计算模型。每一层神经元的输出作为下一层的输入,最终得到网络的输出。

神经网络有下面三个基础层(Layer)构建而成:

- **输入层(Input)**: 神经网络的第一层,负责接收外部数据,不进行计算。

- **隐藏层(Hidden)**: 位于输入层和输出层之间,进行特征提取和转换。隐藏层一般有多层,每一层有多个神经元。

- **输出层(Output)**: 网络的最后一层,产生最终的预测结果或分类结果

输入层 得到外界的一组信息 然后 给隐藏 隐藏层 有很多层

全连接神经网络 每一层与上一层全部链接

全连接(Fully Connected,FC)神经网络是**前馈神经网络**的一种,每一层的神经元与上一层的所有神经元全连接,常用于图像分类、文本分类等任务。

####特点

- 全连接层: 层与层之间的每个神经元都与前一层的所有神经元相连。

- 权重数量: 由于全连接的特点,权重数量较大,容易导致计算量大、模型复杂度高。

- 学习能力: 能够学习输入数据的全局特征,但对于高维数据却不擅长捕捉局部特征(如图像就需要CNN)。

#### 3.3.2 计算步骤

1. 数据传递: 输入数据经过每一层的计算,逐层传递到输出层。

2. 激活函数: 每一层的输出通过激活函数处理。

3. 损失计算: 在输出层计算预测值与真实值之间的差距,即损失函数值。

4. 反向传播(Back Propagation): 通过反向传播算法计算损失函数对每个权重的梯度,并更新权重以最小化损失。

固定值初始化是指在神经网络训练开始时,将所有权重或偏置初始化为一个特定的常数值。这种初始化方法虽然简单,但在实际深度学习应用中通常并不推荐。

使用import torch.nn as nn的init中的方法进行初始化 传入Learnr的权重 linear.weight 方法最后加_表示改原来的linear

### 1.1 全零初始化

将神经网络中的所有权重参数初始化为0。

**方法**:将所有权重初始化为零。

**缺点**:导致对称性破坏,每个神经元在每一层中都会执行相同的计算,模型无法学习。

**应用场景**:通常不用来初始化权重,但可以用来初始化偏置。

import torch.nn as nn

def zero_init():

linear = nn.Linear(in_features=6, out_features=4)

初始化权重参数

nn.init.zeros_(linear.weight)

打印权重参数

print(linear.weight)

全1初始化会导致网络中每个神经元接收到相同的输入信号,进而输出相同的值,这就无法进行学习和收敛。所以全1初始化只是一个理论上的初始化方法,但在实际神经网络的训练中并不适用。

def one_init():

linear = nn.Linear(in_features=6, out_features=4)

初始化权重参数

nn.init.ones_(linear.weight)

打印权重参数

print(linear.weight)

### 1.3 任意常数初始化

将所有参数初始化为某个非零的常数(如 0.1,-1 等)。虽然不同于全0和全1,但这种方法依然不能避免对称性破坏的问题。

def demo1():

2. 固定值参数初始化

linear = nn.Linear(in_features=6, out_features=4)

初始化权重参数

nn.init.constant_(linear.weight, 0.63)

打印权重参数

print(linear.weight)

pass

## 2. 随机初始化

**方法**:将权重初始化为随机的小值,通常从正态分布或均匀分布中采样。

**应用场景**:这是最基本的初始化方法,通过随机初始化避免对称性破坏。

def test001():

1. 均匀分布随机初始化

linear = nn.Linear(in_features=6, out_features=4)# out_features就是返回多少组W 就是输出多少个y 每个y都有一套w 就是相当于做几个线性回归 每一套w和y对应传入给一个神经元

初始化权重参数

nn.init.uniform_(linear.weight)

打印权重参数

print(linear.weight)

#@ 代码演示:正态分布初始化

def test005():

5. 正太分布初始化

linear = nn.Linear(in_features=6, out_features=4)

初始化权重参数

nn.init.normal_(linear.weight, mean=0, std=1) # 均值和标准差

打印权重参数

print(linear.weight)

Xavier 初始化 也叫做Glorot初始化。

根据输入和输出神经元的数量来选择权重的初始值。权重从以下分布中采样:

**优点**:平衡了输入和输出的方差,适合$$Sigmoid$$ 和 $$Tanh$$ 激活函数。

**应用场景**:常用于浅层网络或使用$$Sigmoid$$ 、$$Tanh$$ 激活函数的网络。

def test007():

Xavier初始化:正态分布

linear = nn.Linear(in_features=6, out_features=4)

nn.init.xavier_normal_(linear.weight)

print(linear.weight)

Xavier初始化:均匀分布

linear = nn.Linear(in_features=6, out_features=4)

nn.init.xavier_uniform_(linear.weight)

print(linear.weight)

He初始化 也叫kaiming 初始化。

**优点**:适用于$$ReLU$$ 和 $$Leaky ReLU$$ 激活函数。

**应用场景**:深度网络,尤其是使用 ReLU 激活函数时。

def test006():

He初始化:正态分布

linear = nn.Linear(in_features=6, out_features=4)

nn.init.kaiming_normal_(linear.weight, nonlinearity="relu")

print(linear.weight)

He初始化:均匀分布

linear = nn.Linear(in_features=6, out_features=4)

nn.init.kaiming_uniform_(linear.weight, nonlinearity="relu")

print(linear.weight)

if name=="main":

test001()

demo1()

相关推荐
董董灿是个攻城狮27 分钟前
010:传统计算机视觉之大津算法初探
人工智能·计算机视觉·cnn
Stealmoon_91 小时前
快速、简单的2D-6D位姿估计:Gen6D算法复现 (pytorch 1.12.1 + cu113)
人工智能·pytorch·算法
whaosoft-1431 小时前
51c~Pytorch~合集4
人工智能
爱喝热水的呀哈喽1 小时前
pytorch模型的保存失敗しましたが、
人工智能·pytorch·python
pzx_0012 小时前
【深度学习】通俗理解偏差(Bias)与方差(Variance)
人工智能·python·深度学习·算法·机器学习·集成学习
power-辰南2 小时前
Transformer入门教程全解析(一)
人工智能·深度学习·transformer
筑梦之月2 小时前
浅析大语言模型安全和隐私保护国内外标准和政策
人工智能·安全·语言模型
漂亮_大男孩2 小时前
深度学习|表示学习|为什么要有激活函数?|03
人工智能·深度学习·学习
凌青羽2 小时前
中国科学院|PPTAgent:超越文本到幻灯片的演示文稿生成与评估
人工智能·语言模型·自然语言处理·llm
小饼干超人3 小时前
huggingface/bert/transformer的模型默认下载路径以及自定义路径
人工智能·bert·transformer