深度学习 的过程是不知道用什么分类算法的 让他自己算
传入一组 数据(可以是外界可以是其他神经元) 加权求和 结果传入激活函数 激活函数输出 数据 这个数据可能需要满足一些条件
- 输入(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()