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

神经网络的参数初始化【PyTorch】

文章目录

  • 1、常见初始化方法
  • 2、代码
    • 2.1、导包:
    • 2.2、均匀分布随机初始化
    • 2.3、固定初始化
    • 2.4、全0初始化
    • 2.5、全1初始化
    • 2.6、正态分布随机初始化
    • 2.7、kaiming 初始化
    • 2.8、xavier 初始化
    • 2.9、完整代码
  • 3、小节

🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎人工智能和前端开发。
🦅个人主页:@逐梦苍穹
📕所属专栏:人工智能
🌻gitee地址:xzl的人工智能代码仓库
✈ 您的一键三连,是我创作的最大动力🌹
🛸神经网络参数初始化的相关数学公式:https://xzl-tech.blog.csdn.net/article/details/140745341

1、常见初始化方法

我们在构建网络之后,网络中的参数是需要初始化的。
我们需要初始化的参数主要有权重和偏置:

偏重一般初始化为 0 即可,
而对权重的初始化则会更加重要

下面是几种常见初始化方法!

  1. 均匀分布初始化,权重参数初始化从区间均匀随机取值。即在 [ E = ( − 1 d , 1 d ) ] [ \mathbb{E} = \left( -\frac{1}{\sqrt{d}}, \frac{1}{\sqrt{d}} \right) ] [E=(d 1,d 1)]均匀分布中生成当前神经元的权重,其中d为每个神经元的输入数量。
  2. 正态分布初始化,随机初始化从 **均值为0,标准差是1 **的高斯分布中取样,使用一些很小的值对参数 w w w进行初始化.
  3. 全0初始化,将神经网络中的所有权重参数初始化为 0
  4. 全1初始化,将神经网络中的所有权重参数初始化为 1
  5. 固定值初始化,将神经网络中的所有权重参数初始化为某个固定值
  6. kaiming 初始化,也叫做 HE 初始化。HE 初始化分为正态分布的 HE 初始化均匀分布的 HE 初始化
  7. xavier 初始化,也叫做Glorot初始化,该方法的基本思想是各层激活值和梯度的方差传播过程中保持一致。它有两种,一种是正态分布的 xavier 初始化、一种是均匀分布的 xavier 初始化

2、代码

2.1、导包:

image.png

2.2、均匀分布随机初始化

image.png
image.png

2.3、固定初始化

image.png
image.png

2.4、全0初始化

image.png
image.png

2.5、全1初始化

image.png
image.png

2.6、正态分布随机初始化

image.png
image.png

2.7、kaiming 初始化

image.png
image.png

2.8、xavier 初始化

image.png
image.png

2.9、完整代码

# -*- coding: utf-8 -*-
# @Author: CSDN@逐梦苍穹
# @Time: 2024/7/28 3:33
import torch.nn as nn  # 导入PyTorch的神经网络模块# 1、均匀分布随机初始化
def test01():linear = nn.Linear(5, 3)  # 定义一个线性层,输入大小为5,输出大小为3nn.init.uniform_(linear.weight)  # 使用均匀分布初始化权重print(linear.weight.data)  # 打印初始化后的权重# 2、固定初始化
def test02():linear = nn.Linear(5, 3)  # 定义一个线性层,输入大小为5,输出大小为3nn.init.constant_(linear.weight, 5)  # 使用常数值5初始化权重print(linear.weight.data)  # 打印初始化后的权重# 3、全0初始化
def test03():linear = nn.Linear(5, 3)  # 定义一个线性层,输入大小为5,输出大小为3nn.init.zeros_(linear.weight)  # 使用全0值初始化权重print(linear.weight.data)  # 打印初始化后的权重# 4、全1初始化
def test04():linear = nn.Linear(5, 3)  # 定义一个线性层,输入大小为5,输出大小为3nn.init.ones_(linear.weight)  # 使用全1值初始化权重print(linear.weight.data)  # 打印初始化后的权重# 5、正态分布随机初始化
def test05():linear = nn.Linear(5, 3)  # 定义一个线性层,输入大小为5,输出大小为3nn.init.normal_(linear.weight, mean=0, std=1)  # 使用均值为0,标准差为1的正态分布初始化权重print(linear.weight.data)  # 打印初始化后的权重# 6、kaiming 初始化
def test06():# kaiming 正态分布初始化linear = nn.Linear(5, 3)  # 定义一个线性层,输入大小为5,输出大小为3nn.init.kaiming_normal_(linear.weight)  # 使用kaiming正态分布初始化权重print(linear.weight.data)  # 打印初始化后的权重# kaiming 均匀分布初始化linear = nn.Linear(5, 3)  # 再定义一个线性层,输入大小为5,输出大小为3nn.init.kaiming_uniform_(linear.weight)  # 使用kaiming均匀分布初始化权重print(linear.weight.data)  # 打印初始化后的权重# 7、xavier 初始化
def test07():# xavier 正态分布初始化linear = nn.Linear(5, 3)  # 定义一个线性层,输入大小为5,输出大小为3nn.init.xavier_normal_(linear.weight)  # 使用xavier正态分布初始化权重print(linear.weight.data)  # 打印初始化后的权重# xavier 均匀分布初始化linear = nn.Linear(5, 3)  # 再定义一个线性层,输入大小为5,输出大小为3nn.init.xavier_uniform_(linear.weight)  # 使用xavier均匀分布初始化权重print(linear.weight.data)  # 打印初始化后的权重if __name__ == '__main__':  # 主程序入口test01()  # 均匀分布随机初始化test02()  # 固定初始化test03()  # 全0初始化test04()  # 全1初始化test05()  # 正态分布随机初始化test06()  # kaiming 初始化test07()  # xavier 初始化

3、小节

网络构建完成之后,需要对网络参数进行初始化。
常见的初始化方法有随机初始化、全0初始化、全1初始化、Kaiming 初始化、Xavier 初始化等,
一般在使用 PyTorch 构建网络模型时,每个网络层的参数都有默认的初始化方法

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • arduino程序-MC猜数字1(基础知识)
  • python I 嵌套列表的多种展开方法
  • 32--蜂鸣器
  • 反爬虫限制:有哪些方法可以保护网络爬虫不被限制?
  • 【Linux】(26) 详解磁盘与文件系统:从物理结构到inode机制
  • WebTracing:如何使用一款SDK实现前端全链路监控
  • Qt如何在工程中使用dll库
  • 数据可视化工具,免费无限制制作报表
  • Datawhale AI夏令营第三期 AI+物质科学学习记录 Task2 RNN建模SMILES进行反应产率预测
  • [极客大挑战 2019]PHP1
  • APP逆向 day25unidbg中
  • 遗传算法与深度学习实战——生命模拟及其应用
  • 嵌入式C++、ROS 、OpenCV、SLAM 算法和路径规划算法:自主导航的移动机器人流程设计(代码示例)
  • .JPG图片,各种压缩率下的文件尺寸
  • 这两个大龄程序员,打算搞垮一个世界软件巨头!
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 分享的文章《人生如棋》
  • 【前端学习】-粗谈选择器
  • Android单元测试 - 几个重要问题
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • fetch 从初识到应用
  • Gradle 5.0 正式版发布
  • Java精华积累:初学者都应该搞懂的问题
  • Java应用性能调优
  • Linux下的乱码问题
  • Mithril.js 入门介绍
  • php中curl和soap方式请求服务超时问题
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 番外篇1:在Windows环境下安装JDK
  • 关于 Cirru Editor 存储格式
  • 欢迎参加第二届中国游戏开发者大会
  • 码农张的Bug人生 - 初来乍到
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 一、python与pycharm的安装
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • C# - 为值类型重定义相等性
  • ​io --- 处理流的核心工具​
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (java)关于Thread的挂起和恢复
  • (javaweb)Http协议
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (动态规划)5. 最长回文子串 java解决
  • (十) 初识 Docker file
  • (算法)大数的进制转换
  • (转)德国人的记事本
  • (转)负载均衡,回话保持,cookie
  • ***检测工具之RKHunter AIDE
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .Net 4.0并行库实用性演练
  • .Net Core 生成管理员权限的应用程序
  • .Net Core与存储过程(一)
  • .NET Standard 的管理策略
  • .net 提取注释生成API文档 帮助文档