转载自 https://blog.csdn.net/dss_dssssd/article/details/83959474

本文内容:
1. Xavier 初始化
2. nn.init 中各种初始化函数
3. He 初始化

torch.init https://pytorch.org/docs/stable/nn.html#torch-nn-init
1. 均匀分布

torch.nn.init.uniform_(tensor, a=0, b=1)
服从~U(a,b)

U(a,b)
2. 正太分布

torch.nn.init.normal_(tensor, mean=0, std=1)
服从~N(mean,std)

N(mean,std)
3. 初始化为常数

torch.nn.init.constant_(tensor, val)
初始化整个矩阵为常数val
4. Xavier

基本思想是通过网络层时,输入和输出的方差相同,包括前向传播和后向传播。具体看以下博文:

为什么需要Xavier 初始化?
    文章第一段通过sigmoid激活函数讲述了为何初始化?
    在这里插入图片描述
    简答的说就是:

如果初始化值很小,那么随着层数的传递,方差就会趋于0,此时输入值 也变得越来越小,在sigmoid上就是在0附近,接近于线性,失去了非线性
    如果初始值很大,那么随着层数的传递,方差会迅速增加,此时输入值变得很大,而sigmoid在大输入值写倒数趋近于0,反向传播时会遇到梯度消失的问题

其他的激活函数同样存在相同的问题。
https://prateekvjoshi.com/2016/03/29/understanding-xavier-initialization-in-deep-neural-networks/

所以论文提出,在每一层网络保证输入和输出的方差相同。
2. xavier初始化的简单推导
https://blog.csdn.net/u011534057/article/details/51673458

对于Xavier初始化方式,pytorch提供了uniform和normal两种:

torch.nn.init.xavier_uniform_(tensor, gain=1) 均匀分布 ~ U(−a,a)

U(−a,a)
其中, a的计算公式:a=gain×6fan_in+fan_out−−−−−−−−−−−√a=gain×fan_in+fan_out6​

torch.nn.init.xavier_normal_(tensor, gain=1) 正态分布~N(0,std)
N(0,std)
其中std的计算公式:
std=gain×2fan_in+fan_out−−−−−−−−−−−√std=gain×fan_in+fan_out2​

5. kaiming (He initialization)

Xavier在tanh中表现的很好,但在Relu激活函数中表现的很差,所何凯明提出了针对于Relu的初始化方法。
Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification He, K. et al. (2015)
该方法基于He initialization,其简单的思想是:
在ReLU网络中,假定每一层有一半的神经元被激活,另一半为0,所以,要保持方差不变,只需要在 Xavier 的基础上再除以2

也就是说在方差推到过程中,式子左侧除以2.
pytorch也提供了两个版本:

torch.nn.init.kaiming_uniform_(tensor, a=0, mode=‘fan_in’, nonlinearity=‘leaky_relu’), 均匀分布 ~ U(−bound,bound)

U(−bound,bound)
其中,bound的计算公式:
bound=6(1+a2)×fan_in−−−−−−−−−√bound=(1+a2)×fan_in6​

torch.nn.init.kaiming_normal_(tensor, a=0, mode=‘fan_in’, nonlinearity=‘leaky_relu’), 正态分布~ N(0,std)

N(0,std)

其中,std的计算公式:
std=2(1+a2)×fan_in−−−−−−−−−√
std=(1+a2)×fan_in2​

两函数的参数:

a:该层后面一层的激活函数中负的斜率(默认为ReLU,此时a=0)

mode:‘fan_in’ (default) 或者 ‘fan_out’. 使用fan_in保持weights的方差在前向传播中不变;使用fan_out保持weights的方差在反向传播中不变

针对于Relu的激活函数,基本使用He initialization,pytorch也是使用kaiming 初始化卷积层参数的

pytorch初始化相关推荐

  1. Pytorch:初始化

    4.4 初始化策略 在深度学习中参数的初始化十分重要,良好的初始化能让模型更快收敛,并达到更高水平,而糟糕的初始化则可能使得模型迅速瘫痪.PyTorch中nn.Module的模块参数都采取了较为合理的 ...

  2. pytorch 初始化权重

    一般的网络初始化方法: from torch.nn import functional as F, initdef init_params(self):for m in self.modules(): ...

  3. pytorch默认初始化_PyTorch的初始化

    背景 在使用PyTorch深度学习框架的时候,不管是训练还是测试,代码中引入PyTorch的第一句总是: import torch 在Gemfield前述专栏文章里,我们已经得知,torch/csrc ...

  4. 树莓派4B (aarch64) 安装PyTorch 1.8 的可行方案

    树莓派4B (aarch64) 安装PyTorch 1.8 的可行方案 最终可行方案 试了一堆方案(源码编译.Fast.ai的安装文件等)之后,终于找到一个可行的方案.是在 PyTorch 官方讨论社 ...

  5. pytorch中的激励函数(详细版)

    初学神经网络和pytorch,这里参考大佬资料来总结一下有哪些激活函数和损失函数(pytorch表示) 首先pytorch初始化:   import torch import torch.nn.fun ...

  6. PyTorch中文文档阅读笔记-day1

    写在开头(重复的) 1.课程来源:torch中文教程1.7版. torch中文文档. 2.笔记目的:个人学习+增强记忆+方便回顾 3.时间:2021年4月29日 4.仅作为个人笔记,如有需要请务必按照 ...

  7. (五)使用生成对抗网络 (GAN)生成新的时装设计

    目录 介绍 预测新时尚形象的力量 构建GAN 初始化GAN参数和加载数据 从头开始构建生成器 从头开始构建鉴别器 初始化GAN的损失和优化器 下一步 下载源 - 120.7 MB 介绍 DeepFas ...

  8. 【KG】TransE 及其实现

    原文:https://yubincloud.github.io/notebook/pages/paper/kg/TransE/ TransE 及其实现 1. What is TransE? Trans ...

  9. 中科大+快手出品 CIRS: Bursting Filter Bubbles by Counterfactual Interactive Recommender System 代码解析

    文章目录 前言 论文介绍: 代码介绍: 代码: 一. CIRS-UserModel-kuaishou.py 0. get_args() 解析参数 1. create_dir() 2. Prepare ...

最新文章

  1. PowerDesigner 使用的一些技巧(转)
  2. 转载:Java 内存区域和GC机制
  3. 【很详细】JDK安装与环境变量配置
  4. 【mysql】Innodb三大特性之double write
  5. php数据库的值嵌入input_求助:问个关于用INPUT提取数据库里的值然后修改的问题。...
  6. mac 版ideal 查找类_4款mac窗口切换工具 提高你的工作效率
  7. 微课|中学生可以这样学Python(2.3.3节):reduce()函数
  8. 【写作技巧】毕业论文如何写目录?
  9. python学什么东西_什么是Python?你应该学习和使用它的13个理由
  10. linux 析构函数地址获取_析构函数实现多态
  11. UT源码105032014052
  12. Javase-Concurrency
  13. 进程调度优先数 c语言,进程调度--动态优先数法(C语言实现)
  14. win10下载java软件,下载适用于Windows 10的最新Java版本[32位,64位]
  15. 打造海报视觉效果—利用图层模式调色
  16. Student增删改查
  17. 怎么查看域名被墙_怎么查看域名是否被墙检测(教你一招域名被墙解决办法)...
  18. 流程图设计入门指南 —— 以 Draw.io 为例
  19. Acwing 第四章模板及详解(数学知识)
  20. c 系统语言改为中文,主编设置win7系统英文版改成中文语言的操作技巧

热门文章

  1. 华为南京研究所机考练习-从考试成绩中划出及格线
  2. Java springmvc web项目,基于maven的hello world入门级项目使用IntelliJ IDEA 2017版本
  3. 保驾护航金三银四,附超全教程文档
  4. 错误0x800703e3服务器传输文件,windows 大文件共享传输错误 0X8007003B
  5. 818姐是一名护士,是你娶不起也不敢娶的人
  6. 优先级队列--大根堆和小根堆
  7. 处理人际关系56招,招招见血
  8. 重庆大学计算机学院王臣,谢洪(重庆大学计算机学院教授)_百度百科
  9. 49.(leaflet篇)leaflet实现反向匹配查询(ElasticSearch技术实现)(输入坐标查询距离最近的地址信息)
  10. Java中的Math类相关方法整理