神经网络参数初始化

c15bc04e92f04090b9722eae9dd77e9a.gif

💽参数初始化是神经网络训练过程中的一个重要步骤。在构建神经网络时,我们需要为权重和偏置等参数赋予初始值。对于偏置,通常可以将其初始化为0或者较小的随机数。然而,对于权重w的初始化,我们通常会采用更加复杂的方法,以确保网络能够更好地学习数据的特征。 

我们先给机器一个架构,如下图的两个隐藏层,还有这些神经元,还有给定激活函数,让机器去找w 的取值!就是找出一组参数使得输出效果好!

d1496ff8e4084f938a6901ad8f05a19e.png 

 常见的网络参数初始化方法:

  1. 均匀分布初始化:这种方法通过在特定区间内均匀随机地选择权重参数的初始值。通常,这个区间是(-1/√d, 1/√d),其中d是每个神经元的输入数量。这种初始化方式有助于打破神经元之间的对称性,促进网络的多样性和学习能力。
  2. 正态分布初始化:在这种初始化方法中,权重参数从均值为0,标准差为1的高斯分布中随机取样。这种方法可以确保权重参数有较小的初始值,有助于模型的稳定训练。
  3. 全零初始化:将所有权重和偏置参数初始化为零。虽然这种方法简单直接,但它可能导致所有神经元在学习过程中更新相同,从而引发梯度消失问题。
  4. 全一初始化:将所有权重和偏置参数初始化为一。与全零初始化类似,这种方法也可能导致对称性问题,因为所有神经元学到的东西会相同。
  5. 固定值初始化:使用某个固定的小数值来初始化所有的权重和偏置参数。
  6. Kaiming初始化(也称为He初始化):这是一种特别针对使用ReLU激活函数的神经网络设计的初始化方法。它根据前一层的神经元数量来设置权重的初始范围。
  7. Xavier初始化(也称为Glorot初始化):这种初始化方法根据前一层和后一层的神经元数量来计算权重的初始范围。这种方法旨在保持信号的方差不变,从而有效地初始化神经网络中的权重。

代码示例: 

import torch
import torch.nn as nn
import torch.nn.init as init# 均匀分布初始化
def uniform_init(m):if isinstance(m, nn.Linear):init.uniform_(m.weight, -1/(m.in_features**0.5), 1/(m.in_features**0.5))if m.bias is not None:init.constant_(m.bias, 0)# 正态分布初始化
def normal_init(m):if isinstance(m, nn.Linear):init.normal_(m.weight, mean=0, std=1)if m.bias is not None:init.constant_(m.bias, 0)# 全零初始化
def zero_init(m):if isinstance(m, nn.Linear):init.constant_(m.weight, 0)if m.bias is not None:init.constant_(m.bias, 0)# 全一初始化
def one_init(m):if isinstance(m, nn.Linear):init.constant_(m.weight, 1)if m.bias is not None:init.constant_(m.bias, 0)# 固定值初始化
def fixed_value_init(m, value):if isinstance(m, nn.Linear):init.constant_(m.weight, value)if m.bias is not None:init.constant_(m.bias, 0)# Kaiming初始化(He初始化)
def kaiming_init(m):if isinstance(m, nn.Linear):init.kaiming_normal_(m.weight, mode='fan_in', nonlinearity='relu')if m.bias is not None:init.constant_(m.bias, 0)# Xavier初始化(Glorot初始化)
def xavier_init(m):if isinstance(m, nn.Linear):init.xavier_uniform_(m.weight)if m.bias is not None:init.constant_(m.bias, 0)

在PyTorch中,一般我们在构建网络模型时,每个网络层的参数都有默认的初始化方法,如果需要自定义参数的初始化,可以使用torch.nn.init模块中提供的各种初始化方法。例如,使用torch.nn.init.xavier_uniform_torch.nn.init.kaiming_normal_来实现Xavier和Kaiming初始化。 

❄️torch.nn.init 是 PyTorch 中用于初始化神经网络层(如线性层、卷积层等)权重和偏置的模块。这个模块提供了多种预定义的初始化方法,用户可以根据需要选择合适的方法来初始化网络参数。

❄️torch.nn是PyTorch中用于定义神经网络的模块,它包含了构建神经网络所需的各种层和损失函数。 

  1. 网络层torch.nn提供了多种类型的网络层,包括线性层(Linear)、卷积层(Conv2d)、池化层(MaxPool2d)、循环层(如RNN)等,这些层是构建神经网络的基本单元。
  2. 损失函数:为了训练网络,需要计算损失函数,torch.nn提供了多种损失函数,如交叉熵损失(CrossEntropyLoss)、均方误差损失(MSELoss)等。
  3. 激活函数:激活函数用于引入非线性,torch.nn包含了常见的激活函数,如ReLU、Sigmoid、Tanh等。
  4. 优化器接口:虽然优化器本身不直接包含在torch.nn模块中,但PyTorch提供了torch.optim模块,与torch.nn紧密集成,用于网络参数的优化。
  5. 容器类torch.nn还提供了一些容器类,如SequentialModuleList,它们帮助用户组织和管理网络中的各层。
  6. 功能性操作:除了网络层和损失函数,torch.nn还提供了一些功能性操作,如functional子模块中的函数,它们对张量进行逐元素操作,如relusoftmax等。5674f2dd4a6d40b58a498d6f67973caa.gif

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

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

相关文章

【吊打面试官系列】Java高并发篇 - 如何在两个线程间共享数据?

大家好,我是锋哥。今天分享关于 【 如何在两个线程间共享数据?】面试题,希望对大家有帮助; 如何在两个线程间共享数据? 在两个线程间共享变量即可实现共享。 一般来说,共享变量要求变量本身是线程安全的&a…

GEE数据集——1763 年至 2023 年美国地下水井数据库(USGWD)包括水井用途、位置、深度和容量

简介 地下水井是实现地下水监测、开采和使用的重要基础设施,对环境、水安全和经济发展具有重要影响。尽管地下水井非常重要,但美国一直缺乏一个统一的数据库来收集和标准化有关这些水井的特征和位置的信息。为了弥补这一空白,我们创建了一个…

图像处理之Retinex算法(C++)

图像处理之Retinex算法(C) 文章目录 图像处理之Retinex算法(C)前言一、单尺度Retinex(SSR)1.原理2.代码实现3.结果展示 二、多尺度Retinex(MSR)1.原理2.代码实现3.结果展示 三、带色…

MySQL:ACCESS DENIED FOR USER‘ROOT‘@‘IP地址

起因是使用若依的环境连接数据库时报错:远程数据库连接异常,最终原因是密码错误,且看分解 07:12:06.895 [main] INFO c.r.RuoYiApplication - [logStartupProfileInfo,686] - The following 1 profile is active: "druid" 07:12:…

Windows系统下将MySQL数据库表内的数据全量导入Elasticsearch

目录 下载安装Logstash 配置Logstash配置文件 运行配置文件 查看导入结果 使用Logstash将sql数据导入Elasticsearch 下载安装Logstash 官网地址 选择Windows系统,需下载与安装的Elasticsearch相同版本的,下载完成后解压安装包。 配置Logstash配…

K8S探针分享

一,探针介绍 1 探针类型 livenessProbe:存活探针,用于判断容器是不是健康;如果探测失败,Kubernetes就会重启容器。 readinessProbe:就绪探针,用于判断是否可以将容器加入到Service负载均衡池…

积极应对半导体测试挑战 加速科技助力行业“芯”升级

在全球半导体产业高速发展的今天,中国“芯”正迎来前所未有的发展机遇。AI、5G、物联网、自动驾驶、元宇宙、智慧城市等终端应用方兴未艾,为测试行业带来新的市场规模突破点,成为测试设备未来重要的增量市场。新兴领域芯片产品性能不断提升、…

Day53|动态规划part14: 1143.最长公共子序列、1035. 不相交的线、53. 最大子序和

1143. 最长公共子序列 这题有点像递增子序列和公共子数组的组合, 要求公共子序列不一定非要是连续的。 确定dp数组下标及其含义 dp[i][j]表示text1[i - 1]与text2[j - 1]结尾的最高公共子序列。 长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的…

C++入门基础(一)

目录 C关键字命名空间命名冲突例子域的概念理解命名空间定义例子1例子2例子3例子4例子5例子6例子7 C输出与输入输出输入 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸&#x…

Web前端开发之CSS_1

CSS选择器字体属性背景属性文本属性表格属性 1. CSS 1.1 CSS简介 CSS(Cascading Style Sheets)层叠样式表,又叫级联样式表,简称样式表。CSS文件后缀名为 .css 。CSS用于HTML文档中元素样式的定义。使用CSS可以让网页具有美观一致…

18 JavaScript学习:错误

JavaScript错误 JavaScript错误通常指的是在编写JavaScript代码时发生的错误。这些错误可能是语法错误、运行时错误或逻辑错误。以下是对这些错误的一些常见分类和解释: 语法错误: 这类错误发生在代码编写阶段,通常是由于代码不符合JavaScrip…

python学习笔记----python基础语法(二)

一、字面量 在 Python 中,字面量 是一种直接在代码中表示其自身值的数据。字面量用于创建值,并且可以直接被 Python 的解释器识别和处理。不同类型的数据有不同的字面量形式。下面是一些常见的字面量类型: 二、注释 注释:在程序…