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

news2024/11/15 10:11:30

文章目录

  • 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,输出大小为3
    nn.init.uniform_(linear.weight)  # 使用均匀分布初始化权重
    print(linear.weight.data)  # 打印初始化后的权重


# 2、固定初始化
def test02():
    linear = nn.Linear(5, 3)  # 定义一个线性层,输入大小为5,输出大小为3
    nn.init.constant_(linear.weight, 5)  # 使用常数值5初始化权重
    print(linear.weight.data)  # 打印初始化后的权重


# 3、全0初始化
def test03():
    linear = nn.Linear(5, 3)  # 定义一个线性层,输入大小为5,输出大小为3
    nn.init.zeros_(linear.weight)  # 使用全0值初始化权重
    print(linear.weight.data)  # 打印初始化后的权重


# 4、全1初始化
def test04():
    linear = nn.Linear(5, 3)  # 定义一个线性层,输入大小为5,输出大小为3
    nn.init.ones_(linear.weight)  # 使用全1值初始化权重
    print(linear.weight.data)  # 打印初始化后的权重


# 5、正态分布随机初始化
def test05():
    linear = nn.Linear(5, 3)  # 定义一个线性层,输入大小为5,输出大小为3
    nn.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,输出大小为3
    nn.init.kaiming_normal_(linear.weight)  # 使用kaiming正态分布初始化权重
    print(linear.weight.data)  # 打印初始化后的权重

    # kaiming 均匀分布初始化
    linear = nn.Linear(5, 3)  # 再定义一个线性层,输入大小为5,输出大小为3
    nn.init.kaiming_uniform_(linear.weight)  # 使用kaiming均匀分布初始化权重
    print(linear.weight.data)  # 打印初始化后的权重


# 7、xavier 初始化
def test07():
    # xavier 正态分布初始化
    linear = nn.Linear(5, 3)  # 定义一个线性层,输入大小为5,输出大小为3
    nn.init.xavier_normal_(linear.weight)  # 使用xavier正态分布初始化权重
    print(linear.weight.data)  # 打印初始化后的权重

    # xavier 均匀分布初始化
    linear = nn.Linear(5, 3)  # 再定义一个线性层,输入大小为5,输出大小为3
    nn.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.coloradmin.cn/o/1956827.html

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

相关文章

哨兵Sentinel-2一些有趣的示例

每天我们都会观察周围的世界。在许多情况下,我们认为我们所看到的事物是不言而喻的,它们只是我们所认为的那样。其他时候,我们会更仔细地分析和询问那些看起来不太熟悉的事物。有时,仅仅改变我们的视觉视角就能提供额外的启发和启…

html实现我的博客文章相册源码

文章目录 1.设计来源1.1 相册界面1.2 相册详细界面1.3 文章界面1.4 文章详细界面1.5 关于我1.6 联系我 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:http…

轻松上手MYSQL:JSON函数实现高效数据查询与操作

🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL》 💪🏻 制定明确可量化的目标,坚持默默的做事。 ✨欢迎加入探索MYSQL字符串函数之旅✨ 👋 大家好!文本学习和探…

「ETL趋势」定时任务自动化导出Excel/CSV,高效归档业务明细数据

目录 一、Excel/CSV文件输出应用场景 二、Excel/CSV文件输出的常见问题 三、合同订单数据文件输出实战 1)合同订单数据输出为 CSV 文件 1、建立业务系统数据库、FTP/SFTP 服务器数据连接 2、数据处理 3、输出为文件 4、运行效果查看 2)合同订单数据输出为…

数据结构第七讲:栈和队列OJ题

数据结构第七讲:栈和队列OJ题 1.有效的括号2.用队列实现栈3.用栈实现队列4.设计循环队列 1.有效的括号 链接: OJ题目链接 typedef char StackDataType;typedef struct Stack {StackDataType* arr;//使用一个指针来指向开辟的数组int capacity;//保存数组的空间大…

concrt140.dll丢失是什么情况?有效的解决dll!

concrt140.dll文件丢失是电脑中少见的文件,但也会因为某些原因会导致电脑丢失concrt140.dll文件,那么出现这文件的原因是什么呢?出现这样的问题有什么办法可以将concrt140.dll修复呢?一起来看看吧。 为什么会缺失concrt140.dll文件…

前端:数字世界的门面与灵魂

在当今数字化时代,前端作为用户与网站或应用直接交互的界面,其重要性不言而喻。它不仅是信息的展示窗口,更是用户体验(UX)和用户界面(UI)设计的核心。本文将深入剖析前端在整体网站或应用中的重…

vscode 创建QT最简工程

1. 前提条件 qt 安装cmake安装 参考: https://blog.csdn.net/qq_51355375/article/details/139890889vscode 环境配置 参考: https://blog.csdn.net/qq_51355375/article/details/140733495 2. 工程创建 include 放头文件src .cpp 文件CMakeList.tex …

物品租赁小程序论文(设计)开题报告

一、课题的背景和意义 近些年来,随着移动互联网巅峰时期的来临,互联网产业逐渐趋于“小、轻、微”的方向发展,符合轻应用时代特点的各类技术受到了不同领域的广泛关注。在诸多产品中,被誉为“运行着程序的网站”之名的微信小程序…

搭建开发环境

1、安装VMware 参考01【正点原子】ATK-DLRK3568嵌入式Linux系统开发手册V1.2 2、安装ubuntu 参考01【正点原子】ATK-DLRK3568嵌入式Linux系统开发手册V1.2 2.1、Ubuntu 系统设置 root 用户密码 新安装的ubuntu没有设置 root 用户密码,打开终端,输入 sudo passwd root 执…

C#使用NModbus4库创建Modbus TCP Slave(服务器)简单示例

本文续上篇Codesys—标准库ModbusTCP Master(客户端)配合C#的NModbus4库的通讯示例 链接:https://blog.csdn.net/wushangwei2019/article/details/136375234?spm1001.2014.3001.5501 上篇描述在Codesys端的Modbus TCP Master(客户端)的设备添加、IO映射、通讯简单…

机器视觉12-相机

相机 作用: 工业相机 是 机器视觉系统 的重要组成部分 最本质的功能就是通过CCD或CMOS成 像传感器将镜头产生的光信号转变为 有序的电信号,并将这些信息通过相 应接口传送到计算机主机 工业相机分类 目前业内没有对相机进行明确的分类定义, 以下分类是…

svn软件总成全内容

SVN软件总成 概述:本文为经验型文档 目录 D:\安装包\svn软件总成 的目录D:\安装包\svn软件总成\svn-base添加 的目录D:\安装包\svn软件总成\tools 的目录D:\安装包\svn软件总成\tools\sqlite-tools-win32-x86-3360000 的目录D:\安装包\svn软件总成\安装包-----bt lo…

一分钟搞定文件翻译|2024年4款翻译工具,职场达人都在用!

在全球化的大环境下,跨国沟通和协作变得非常普遍。不管是在公司间谈生意,还是跟外国朋友聊天,翻译文件成了我们经常要做的事情。但是一大堆文件和各种各样的语言,怎么才能又快又好地翻译出来,提升工作速度呢&#xff1…

本地部署Whisper Web结合内网穿透实现远程访问本地语音转文本模型

本地部署Whisper Web结合内网穿透实现远程访问本地语音转文本模型 🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者&…

分享10个免费的职场办公常用工具网站

在现代职场中,高效办公工具网站的使用可以显著提升工作效率。小编今天就和大家分享10个免费实用且高质量的职场办公常用工具网站。 1.Convertio Convertio是一个万能文件转换工具,支持多种格式之间的转换,包括PDF、Excel、Word等。它操作简…

C#与欧姆龙PLC 通信——fins udp协议

前言 欧姆龙PLC在工控领域占有很大的市场份额,在上位机编程领域,实现上位机和欧姆龙PLC的通信也是必备的技能,上位机和PLC可以通过fins udp和fins tcp协议通信,本文介绍的是fins udp协议,该协议具有传输速度快的特点,为了帮助大家学习fins udp协议,我编写了“欧姆龙Fin…

【从0制作自己的ros导航小车:上、下位机通信篇】上、下位机串口DMA通信

从0制作自己的ros导航小车 前言一、准备工作二、下位机端(STM32)三、上位机端(旭日x3派)四、测试 前言 下位机的电机驱动、轮速读取、偏航角读取都已经完成,接下来就是上下位机的桥梁:串口通信。 使用USB转…

Mysql in 与 exists

在MySQL中,IN和EXISTS都是用于子查询的条件语句,但它们在性能和使用场景上有不同的特点和应用。下面是对它们的详细介绍以及示例说明:

springboot中小型酒店管理系统-计算机毕业设计源码02793

摘要 随着互联网和移动技术的快速发展,酒店行业也面临着巨大的变革和机遇。传统的酒店管理方式存在着信息不透明、预订流程繁琐等问题,无法满足现代消费者对便捷、高效、个性化服务的需求。因此,开发中小型酒店管理系统具有重要的意义。本文旨…