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()

相关推荐
QQ_7781329745 分钟前
从文本到视频:基于扩散模型的AI生成系统全解析(附PyTorch实现)
人工智能·pytorch·python
ljd21032312431 分钟前
opencv函数展示2
人工智能·opencv·计算机视觉
戈云 110638 分钟前
Spark-SQL
人工智能·spark
明明真系叻1 小时前
2025.4.20机器学习笔记:文献阅读
人工智能·笔记·机器学习
学术小八1 小时前
2025年机电一体化、机器人与人工智能国际学术会议(MRAI 2025)
人工智能·机器人·机电
爱的叹息1 小时前
关于 雷达(Radar) 的详细解析,涵盖其定义、工作原理、分类、关键技术、应用场景、挑战及未来趋势,结合实例帮助理解其核心概念
人工智能·分类·数据挖掘
许泽宇的技术分享1 小时前
.NET MCP 文档
人工智能·.net
anscos2 小时前
Actran声源识别方法连载(二):薄膜模态表面振动识别
人工智能·算法·仿真软件·actran
-曾牛2 小时前
【LangChain4j快速入门】5分钟用Java玩转GPT-4o-mini,Spring Boot整合实战!| 附源码
java·开发语言·人工智能·spring boot·ai·chatgpt
token-go2 小时前
[特殊字符] KoalaAI 1.0.23 震撼升级:GPT-4.1免费畅享,AI革命触手可及!
人工智能