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

深度学习(6):参数初始化

一、任意常数初始化

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

import torch
import torch.nn as nndef test002():# 2. 固定值参数初始化linear = nn.Linear(in_features=6, out_features=4)# 初始化权重参数nn.init.constant_(linear.weight, 0.63)# 打印权重参数print(linear.weight)passif __name__ == "__main__":test002()"""
Parameter containing:
tensor([[0.6300, 0.6300, 0.6300, 0.6300, 0.6300, 0.6300],[0.6300, 0.6300, 0.6300, 0.6300, 0.6300, 0.6300],[0.6300, 0.6300, 0.6300, 0.6300, 0.6300, 0.6300],[0.6300, 0.6300, 0.6300, 0.6300, 0.6300, 0.6300]], requires_grad=True)
"""

二、随机初始化

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

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

代码演示:随机分布之均匀初始化

import torch
import torch.nn as nndef test001():# 1. 均匀分布随机初始化linear = nn.Linear(in_features=6, out_features=4)# 初始化权重参数nn.init.uniform_(linear.weight)# 打印权重参数print(linear.weight)if __name__ == "__main__":test001()
"""
Parameter containing:
tensor([[0.4080, 0.7444, 0.7616, 0.0565, 0.2589, 0.0562],[0.1485, 0.9544, 0.3323, 0.9802, 0.1847, 0.6254],[0.6256, 0.2047, 0.5049, 0.3547, 0.9279, 0.8045],[0.1994, 0.7670, 0.8306, 0.1364, 0.4395, 0.0412]], requires_grad=True)
"""

三、Xavier 初始化

也叫做Glorot初始化。

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

其中 n(in)是当前层的输入神经元数量,n(out)是输出神经元数量。

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

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

import torch
from torch import nn# xavier初始化
# 核心思想:
# 1.前向传播的方差一致性
# 2.反向传播的梯度方差一致性# 作用:
# 避免神经网络训练前期出现梯度消失或梯度爆炸def test01():model = nn.Linear(6,4)#w参数:均匀分布初始化nn.init.xavier_uniform(model.weight)#b参数:随机初始化-均匀分布nn.inite.uniform(model.bias)print(model.weight)"""
tensor([[-0.6347,  0.4248, -0.3963,  0.6780,  0.7441, -0.0334],[ 0.2761, -0.6402, -0.2494,  0.2563, -0.2318, -0.1867],[-0.2232, -0.1069, -0.4601, -0.5499, -0.2174, -0.7201],[-0.6542,  0.2042, -0.5671,  0.2029, -0.2438,  0.0544]],requires_grad=True)
"""
def test02():model = nn.Linear(6, 4)# w参数:正态分布初始化nn.init.xavier_normal_(model.weight)# b参数:随机初始化-正态分布nn.init.normal_(model.bias)print(model.weight)print(model.bias)"""
Parameter containing:
tensor([-1.1664,  1.3327, -0.9933, -1.9076], requires_grad=True)
"""
if __name__ == '__main__':# test01()test02()

四、He初始化

也叫kaiming 初始化。

方法:专门为 ReLU 激活函数设计。权重从以下分布中采样:

其中n(in)是当前层的输入神经元数量。

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

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

import torch
from torch import nn# He初始化(kaiming)
# 核心思想:
# 1.前向传播的方差一致性
# 2.反向传播的梯度方差一致性# 作用:
# 避免神经网络训练前期出现梯度消失或梯度爆炸# 两种模式:
# 1.fan_in:优先保证前向传播的方差一致性,默认
# 2.fan_out:优先保证反向传播的梯度方差一致性def test03():model = nn.Linear(6, 4)# w参数:kaiming正态分布初始化nn.init.kaiming_normal_(model.weight)# b参数:随机正态分布初始化nn.init.normal_(model.bias)print(model.weight)def test04():model = nn.Linear(6, 4)# w参数:kaiming均匀分布初始化nn.init.kaiming_uniform_(model.weight)# b参数:随机均匀分布初始化nn.init.uniform_(model.bias)print(model.weight)# 当创建Linear线性层时,pytorch默认使用kaiming_uniform_对w参数进行初始化,使用uniform_对b参数进行初始化if __name__ == '__main__':# test03()test04()

http://www.lryc.cn/news/619826.html

相关文章:

  • Jenkins(集群与流水线配置)
  • 卷积神经网络(CNN):卷积和池化
  • 常用 MaxKB 函数库(HTTP、MYSQL)
  • Day 39: 图像数据与显存
  • 智算赋能:移动云助力“世界一流数据强港”建设之路
  • 深度学习·ExCEL
  • RK3568项目(十五)--linux驱动开发之进阶驱动
  • Spring Boot (v3.2.12) + application.yml + jasypt 数据源加密连接设置实例
  • Java Stream API 中常用方法复习及项目实战示例
  • AR技术赋能风电组装:效率提升30%,错误率降低50%
  • 华为悦盒EC6108V9-1+4G版-盒子有【蓝色USB接口】的特殊刷机说明
  • UniApp开发常见问题及解决办法
  • RabbitMQ面试精讲 Day 21:Spring AMQP核心组件详解
  • FluxApi - 使用Spring进行调用Flux接口
  • 后端Web实战-MySQL数据库
  • 【SpringBoot系列-01】Spring Boot 启动原理深度解析
  • 力扣121:买卖股票的最佳时机
  • 敲响变革的钟声:AI 如何重塑前端开发的基础认知
  • Java毕业设计选题推荐 |基于SpringBoot的水产养殖管理系统 智能水产养殖监测系统 水产养殖小程序
  • Kubernetes部署apisix的理论与最佳实践(三)
  • 从原材料到成品,光模块 PCB 制造工艺全剖析
  • JavaWeb-XML、HTTP协议和Tomcat服务器
  • 解析Vue3中集成WPS Web Office SDK的最佳实践
  • DAY42 Grad-CAM与Hook函数
  • Spring Boot调用优化版AI推理微服务 集成 NVIDIA NIM指南
  • 利用生成式AI与大语言模型(LLM)革新自动化软件测试 —— 测试工程师必读深度解析
  • Pycharm选好的env有包,但是IDE环境显示无包
  • Appium-移动端自动测试框架详解
  • windows通过共享网络上网
  • 100、【OS】【Nuttx】【构建】cmake 配置保存