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

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


http://www.kler.cn/a/416320.html

相关文章:

  • C语言学习 13(编程题)
  • vue element-ui的el-image 和 el-table冲突层级冲突问题问题preview-teleported
  • 使用LLaMA-Factory微调时的数据集选择
  • SRIO DRP动态速率配置说明(详细讲解)
  • 环形链表系列导学
  • Spring Boot开发——整合JPA配置多数据源
  • 华纳云:怎么通过宝塔面板访问php My Admin?
  • 群控系统服务端开发模式-应用开发-前端邮箱配置开发
  • txt地图格式处理
  • 搜索二维矩阵 II(java)
  • Maven Surefire 插件简介
  • 【Web开发基础学习——corsheaders 应用的理解】
  • Android Studio的AI工具插件使用介绍
  • 宠物之家:基于SpringBoot的领养平台
  • Windows搭建MaskRCNN环境
  • UML的相关介绍
  • 来聊一聊MySQL的Double write和Buffer Pool的关系
  • 论文笔记(五十八)Trends and challenges in robot manipulation
  • SSM搭建(1)——配置MyBatis
  • 第 36 章 - Go语言 服务网格