神经网络的参数初始化【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,一经查实,立即删除!

相关文章

springboot保存mysql datetime类型多一秒

问题描述 Java Date类型为 2022-01-01 23:59:59 但是保存到数据库变成了2022-01-02 00:00:00 解决办法 改成datetime Length为3

Java核心 - Lambda表达式详解与应用示例

作者:逍遥Sean 简介:一个主修Java的Web网站\游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有疑问和建议,请私信或评论留言! 前言 Lambda表达式是…

json 模块

目录 常用功能 主要函数和方法 1. json.dumps() 2. json.loads() 3. json.dump() 4. json.load() 参数说明 json 模块是 Python 标准库中用于处理 JSON 数据的模块。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛…

科技云报道:算网筑基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案例演示 当我们对流式…

版本管理|为什么不推荐使用Git Rebase

文章目录 什么是 Git Rebase?如何使用 Git Rebase?基本语法示例更多选项 注意事项何时使用何时避免其他注意事项 为什么需要谨慎使用 Git Rebase?面试中的常见问题问题 1: Git Rebase 和 Git Merge 有何不同?问题 2: 为什么有时应…

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

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

STM32H7的USBFS与RTOS+CACHE存在未知的冲突

Freertos只创建了一个空任务。 USB中断优先级为5。 USB相关内存被自动放在了DTCM区,并且未开启DMA。 多次实验的现象为: 1.裸机时,开启CACHE,USB可以正常通信。 2.Freertos空任务,开启CACHE,USB上电后数秒…

【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 …

c++中的内联函数inline友元函数friend和仿函数类

在C的魔法世界里,有三种“超能力”:内联函数inline、友元函数friend和仿函数类。它们各具特色,但都拥有让代码更加优雅和强大的魔力。最近有同学开始使用友元函数来实现重载,既然这样,今天,我们就将他们三个…

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

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

粗解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 …

1180:分数线划定

思路&#xff1a; 简化&#xff1a; 我们可以用 define 把数对的 first 和 second 简化成 X 和 Y。随后用 typedef 把 pair<int,int> 简化成 PIR。 保存&#xff1a; 输入 num 和 score 后&#xff0c;我们可以用可变数组的 push_back() 来保存进去。 排序&#xff…