神经网络的参数初始化【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 构建网络模型时,每个网络层的参数都有默认的初始化方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科技云报道:算网筑基AI注智,中国联通如何讲出AI时代的“新故事”?

科技云报道原创。 AI从未停止进化,也从未停止给人类带来惊喜。 从ChatGPT代表的文生文、Dall-E代表的文生图,到Sora代表的文生视频,Suno为代表的文生音乐,生成式AI的“暴力美学”持续突破内容生产的天花板,大模型技术…

Pytorch基础:Tensor的view方法(非连续张量也可以使用view)

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 在Pytorch中,view是Tensor的一个重要方法,用于返回一个改变了形状,但数据和数据的顺序与原来一致的新张量,但是新张…

VSCode 解决 pylint 报错 No name QWidget in module PyQt5.QtWidgets

问题 启用了 VSCode 的 Pylint 插件, 即便 Python 环境中安装了 PyQt5, 也无法正确解析 PyQt5 的导入 PyQt5 底层代码是用 C/C 写的, pylint 默认不会深入解析 pylint doesn’t load any C extensions by default, because those can run arbitrary code. 解决 修改 Settings…

Spark实时(六):Output Sinks案例演示

文章目录 Output Sinks案例演示 一、​​​​​​​File sink 二、​​​​​​​​​​​​​​Memory Sink 三、​​​​​​​​​​​​​​Foreach Sink 1、​​​​​​​foreachBatch 2、​​​​​​​​​​​​​​foreach Output Sinks案例演示 当我们对流式…

kotlin协程-- 基础概念 ①|创建和使用

引言 首先先说一些相关概念 1.并发与并行 在操作系统中我们曾经学到过并发与并行 并发: 是同一个时刻只有一条指令在执行,其他指令没有再执行,但是由于CPU的时间片特别短,导致多个指令来回切换的时间间隔特别短,就好像是同一时间多条指令在执行。单核CPU与多核CPU都可以进…

【python】Python常见的面试题解析:深入探索与实践,助你少走弯路

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

若依ruoyi+AI项目二次开发(智能售货机运营管理系统)

(一) 帝可得 - 产品原型 - 腾讯 CoDesign (qq.com)

一些电脑的操作技巧,你知道吗?

我整理了几个电脑使用的实用技巧,能够帮你提升办公效率,一起来看看吧! 技巧一:反方向移动单元格 一般来讲,我们按下【Tab】键、【Enter】键的时候,会切换到右边或者下边的单元格,想要反向移动…

第2章 编译SDK

安装编译依赖 sudo apt-get update sudo apt-get install clang-format astyle libncurses5-dev build-essential python-configparser sconssudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool \ expect g patchelf chrpath gawk texinfo chrpath diffstat …

董宇辉离职,我一点都不意外!只不过感觉来的太快

下面这张图,是我在半年多前写的一段随笔,没想到来的这么快! 碰巧的是今天中午,在开发者群里有两位老铁自曝,本以为能公司干到老,但公司却不给机会,已经不在是公司员工了。 最近,晓衡…

粗解React 和 Vue 的异同

相同点: 1、都使用虚拟 DOM【Virtural DOM】 Vue与React都使用了 Virtual DOM Diff算法, 不管是Vue的Template模板options api 写法, 还是React的Class或者Function写法,最后都是生成render函数,而render函数执行返回VNode(虚拟…

iOS collectionView 滑动出现空白

iOS collectionView 滑动出现空白 一个很常见的 banner 轮播,滑动的时候,有时候会出现空白,检查了下,发现代码没什么问题,上网查了也没啥结果,最后的解决方法是自定义layout解决 interface TMLoopViewLayo…

创新概念:柯尔莫哥洛夫-阿诺德网络

文章目录 一、说明二、基础概念三、kolmogorov-Arnold 网络性质3.1 KAN 的潜在优势3.2 挑战和注意事项 四、基本 KAN 超参数五、COLAB 代码六、注意点 一、说明 kolmogorov-Arnold 网络 (KAN) 是深度学习领域的一项“创新”,它提供了一种受现有 Kolmogorov-Arnold …

python基础---1.变量、运算符和表达式、基本数据结构

🎈个人主页:靓仔很忙i 💻B 站主页:👉B站👈 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:python 🤝希望本文对您有所裨益,如有不足之处&…

使用Docker搭建MySql的主从同步+ShardingSphere搭建Mysql的读写分离

参考课程 尚硅谷ShardingSphere5实战教程(快速入门掌握核心)_哔哩哔哩_bilibili 主服务器 创建容器 docker run -d \ -p 3306:3306 \ -v /kira/mysql/master/conf:/etc/mysql/conf.d \ -v /kira/mysql/master/data:/var/lib/mysql \ -e MYSQL_ROOT…

(day26)leecode热题——找到字符串中所有字母异位词

描述 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。 示例 1: 输入: s "cbaebabacd", p …

【Git-驯化】一文搞懂git中代码冲突的解决方案大全

【Git-驯化】一文搞懂git中代码冲突的解决方案大全 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取相关内容文档关注&#xff1a…

[C++实战]日期类的实现

💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到C探索系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站…

ELK安装(Elasticsearch+Logstash+Kibana+Filebeat)

一、简介 1.1、软件简介 ELK其实是Elasticsearch,Logstash 和 Kibana三个产品的首字母缩写,这三款都是开源产品。 1.1.1、Elasticsearch简介 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析…

springboot微信老人健康与饮食管理系统-计算机毕业设计源码82939

基于微信老人健康与饮食管理系统的小程序 摘 要 基于Spring Boot的微信老人健康与饮食管理系统的小程序致力于为老年人提供便捷的健康管理和饮食指导服务。该小程序整合了健康资讯浏览、食谱推荐、健康评估等功能模块,通过系统的设计与实现,旨在帮助老年…