PyTorch框架学习十一——网络层权值初始化

PyTorch框架学习十一——网络层权值初始化

  • 一、均匀分布初始化
  • 二、正态分布初始化
  • 三、常数初始化
  • 四、Xavier 均匀分布初始化
  • 五、Xavier正态分布初始化
  • 六、kaiming均匀分布初始化

前面的笔记介绍了网络模型的搭建,这次将介绍网络层权值的初始化,适当的初始化方法可以使得避免梯度消失或梯度爆炸等问题,还能一定程度上加快网络的训练迭代过程。

下面将介绍PyTorch中十种常用的权值初始化的方法:

一、均匀分布初始化

torch.nn.init.uniform_(tensor: torch.Tensor, a: float = 0.0, b: float = 1.0) → torch.Tensor

功能:将输入张量的值用均匀分布U(a,b)随机采样得到的值填充。

参数如下所示:
在这里插入图片描述

  1. tensor:要初始化的张量。
  2. a:均匀分布的下界。
  3. b:均匀分布的上界。

举个栗子:

>>> w = torch.empty(3, 5)
>>> nn.init.uniform_(w)

二、正态分布初始化

torch.nn.init.normal_(tensor: torch.Tensor, mean: float = 0.0, std: float = 1.0) → torch.Tensor

功能:将输入张量的值用正态分布 N( mean, std ^2 )随机采样得到的值填充。

参数如下所示:
在这里插入图片描述

  1. tensor:要初始化的张量。
  2. mean:正态分布的均值。
  3. std:正态分布的标准差。

三、常数初始化

torch.nn.init.constant_(tensor: torch.Tensor, val: float) → torch.Tensor

功能:用固定值去填充张量。

参数如下:
在这里插入图片描述

  1. tensor:要填充的张量。
  2. val:要填充的值。

四、Xavier 均匀分布初始化

torch.nn.init.xavier_uniform_(tensor: torch.Tensor, gain: float = 1.0) → torch.Tensor

功能:从下面这个均匀分布中随机采样初始化(具体看介绍Xavier的内容)
在这里插入图片描述
参数如下所示:
在这里插入图片描述

  1. tensor:要初始化的张量。
  2. gain:根据激活函数来定,保证网络层各层权重的方差差距不大。

举个栗子:

class MLP(nn.Module):def __init__(self, neural_num, layers):super(MLP, self).__init__()self.linears = nn.ModuleList([nn.Linear(neural_num, neural_num, bias=False) for i in range(layers)])self.neural_num = neural_numdef forward(self, x):for (i, linear) in enumerate(self.linears):x = linear(x)print("layer:{}, std:{}".format(i, x.std()))if torch.isnan(x.std()):print("output is nan in {} layers".format(i))breakreturn xdef initialize(self):for m in self.modules():if isinstance(m, nn.Linear):nn.init.xavier_uniform_(m.weight.data)# flag = 0
flag = 1if flag:layer_nums = 100neural_nums = 256batch_size = 16net = MLP(neural_nums, layer_nums)net.initialize()inputs = torch.randn((batch_size, neural_nums))  # normal: mean=0, std=1output = net(inputs)print(output)

构建了一个100层,每层有256个神经元的全连接神经网络,输出每一层网络的数据分布的标准差:

layer:0, std:0.9939432144165039
layer:1, std:0.988370954990387
layer:2, std:0.9993033409118652
layer:3, std:0.9946814179420471
layer:4, std:1.0136058330535889
layer:5, std:0.9804127812385559
layer:6, std:0.9861023426055908
layer:7, std:0.9943155646324158
layer:8, std:0.9847374558448792
layer:9, std:0.9681516885757446
layer:10, std:0.9731113910675049
layer:11, std:0.9867657423019409
layer:12, std:0.998853862285614
layer:13, std:0.9768239259719849
layer:14, std:0.980059027671814
layer:15, std:0.9851741790771484
layer:16, std:1.0022122859954834
layer:17, std:0.9788040518760681
layer:18, std:1.0017856359481812
layer:19, std:1.0342336893081665
layer:20, std:1.0184755325317383
layer:21, std:1.016075849533081
layer:22, std:0.9980445504188538
layer:23, std:1.0043185949325562
layer:24, std:0.9859704375267029
layer:25, std:0.9940337538719177
layer:26, std:1.0047379732131958
layer:27, std:1.0038164854049683
layer:28, std:1.0144379138946533
layer:29, std:1.0297335386276245
layer:30, std:1.0231270790100098
layer:31, std:0.9947567582130432
layer:32, std:1.0121735334396362
layer:33, std:1.0102561712265015
layer:34, std:1.0205620527267456
layer:35, std:1.0590678453445435
layer:36, std:1.0277358293533325
layer:37, std:1.0321041345596313
layer:38, std:1.0334043502807617
layer:39, std:1.0470187664031982
layer:40, std:1.0888501405715942
layer:41, std:1.063532829284668
layer:42, std:1.0635225772857666
layer:43, std:1.0936106443405151
layer:44, std:1.0897372961044312
layer:45, std:1.0780189037322998
layer:46, std:1.1132346391677856
layer:47, std:1.1005138158798218
layer:48, std:1.0610020160675049
layer:49, std:1.114995002746582
layer:50, std:1.107061743736267
layer:51, std:1.1147115230560303
layer:52, std:1.1051268577575684
layer:53, std:1.0692596435546875
layer:54, std:1.059423565864563
layer:55, std:1.0318952798843384
layer:56, std:1.0445512533187866
layer:57, std:1.038772463798523
layer:58, std:1.0729072093963623
layer:59, std:1.0931061506271362
layer:60, std:1.102836012840271
layer:61, std:1.0710251331329346
layer:62, std:1.0685100555419922
layer:63, std:1.0235627889633179
layer:64, std:1.0192655324935913
layer:65, std:1.0483664274215698
layer:66, std:1.033905267715454
layer:67, std:1.0418909788131714
layer:68, std:1.0399161577224731
layer:69, std:1.0536786317825317
layer:70, std:1.041662573814392
layer:71, std:1.0555484294891357
layer:72, std:1.0822663307189941
layer:73, std:1.0788710117340088
layer:74, std:1.1118624210357666
layer:75, std:1.0804673433303833
layer:76, std:1.0754098892211914
layer:77, std:1.0847842693328857
layer:78, std:1.0808136463165283
layer:79, std:1.0306202173233032
layer:80, std:1.0064393281936646
layer:81, std:1.0131638050079346
layer:82, std:1.023984670639038
layer:83, std:1.005560040473938
layer:84, std:0.9921131134033203
layer:85, std:0.9612709879875183
layer:86, std:0.957591712474823
layer:87, std:0.952028751373291
layer:88, std:0.9482743144035339
layer:89, std:0.9498487114906311
layer:90, std:0.9595613479614258
layer:91, std:0.9428602457046509
layer:92, std:0.9281052350997925
layer:93, std:0.8957657814025879
layer:94, std:0.9068138003349304
layer:95, std:0.8488100171089172
layer:96, std:0.8666995763778687
layer:97, std:0.8959987759590149
layer:98, std:0.8925248980522156
layer:99, std:0.8857517242431641

可以看出是基本在1附近的,这样既不会梯度消失也不会梯度爆炸。

五、Xavier正态分布初始化

torch.nn.init.xavier_normal_(tensor: torch.Tensor, gain: float = 1.0) → torch.Tensor

功能:从这个正态分布N(0, std^2)中随机采样初始化(具体看介绍Xavier的内容),其中:
在这里插入图片描述

参数如下所示:
在这里插入图片描述

六、kaiming均匀分布初始化

torch.nn.init.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')

功能:从均匀分布 U(-bound, bound) 中随机采样初始化(具体看介绍kaiming的内容:Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification - He, K. et al. (2015)
其中:
在这里插入图片描述

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

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

相关文章

W3C 战败:无权再制定 HTML 和 DOM 标准!

来源:CSDN历史性时刻!——近日,W3C正式宣告战败:HTML和DOM标准制定权将全权移交给浏览器厂商联盟WHATWG。由苹果、Google、微软和Mozilla四大浏览器厂商组成的WHATWG已经与万维网联盟(World Wide Web Consortium&#…

PyTorch框架学习十二——损失函数

PyTorch框架学习十二——损失函数一、损失函数的作用二、18种常见损失函数简述1.L1Loss(MAE)2.MSELoss3.SmoothL1Loss4.交叉熵CrossEntropyLoss5.NLLLoss6.PoissonNLLLoss7.KLDivLoss8.BCELoss9.BCEWithLogitsLoss10.MarginRankingLoss11.HingeEmbedding…

化合物半导体的机遇

来源:国盛证券半导体材料可分为单质半导体及化合物半导体两类,前者如硅(Si)、锗(Ge)等所形成的半导体,后者为砷化镓(GaAs)、氮化镓(GaN)、碳化硅(…

PyTorch框架学习十三——优化器

PyTorch框架学习十三——优化器一、优化器二、Optimizer类1.基本属性2.基本方法三、学习率与动量1.学习率learning rate2.动量、冲量Momentum四、十种常见的优化器(简单罗列)上次笔记简单介绍了一下损失函数的概念以及18种常用的损失函数,这次…

最全芯片产业报告出炉,计算、存储、模拟IC一文扫尽

来源:智东西最近几年, 半导体产业风起云涌。 一方面, 中国半导体异军突起, 另一方面, 全球产业面临超级周期,加上人工智能等新兴应用的崛起,中美科技摩擦频发,全球半导体现状如何&am…

python向CSV文件写内容

f open(r"D:\test.csv", w) f.write(1,2,3\n) f.write(4,5,6\n) f.close() 注意:上面例子中的123456这6个数字会分别写入不同的单元格里,即以逗号作为分隔符将字符串内容分开放到不同单元格 上面例子的图: 如果要把变量的值放入…

PyTorch框架学习十四——学习率调整策略

PyTorch框架学习十四——学习率调整策略一、_LRScheduler类二、六种常见的学习率调整策略1.StepLR2.MultiStepLR3.ExponentialLR4.CosineAnnealingLR5.ReduceLRonPlateau6.LambdaLR在上次笔记优化器的内容中介绍了学习率的概念,但是在整个训练过程中学习率并不是一直…

JavaScript数组常用方法

转载于:https://www.cnblogs.com/kenan9527/p/4926145.html

蕨叶形生物刷新生命史,动物界至少起源于5.7亿年前

来源 :newsweek.com根据发表于《古生物学》期刊(Palaeontology)的一项研究,动物界可能比科学界所知更加古老。研究人员发现,一种名为“美妙春光虫”(Stromatoveris psygmoglena)的海洋生物在埃迪…

PyTorch框架学习十五——可视化工具TensorBoard

PyTorch框架学习十五——可视化工具TensorBoard一、TensorBoard简介二、TensorBoard安装及测试三、TensorBoard的使用1.add_scalar()2.add_scalars()3.add_histogram()4.add_image()5.add_graph()之前的笔记介绍了模型训练中的数据、模型、损失函数和优化器,下面将介…

CNN、RNN、DNN的内部网络结构有什么区别?

来源:AI量化百科神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。早期感知机的推动者是…

L2级自动驾驶量产趋势解读

来源:《国盛计算机组》L2 级自动驾驶离我们比想象的更近。18 年下半年部分 L2 车型已面世,凯迪拉克、吉利、长城、长安、上汽等均已推出了 L2 自动驾驶车辆。国内目前在售2872个车型,L2级功能渗透率平均超过25%,豪华车甚至超过了6…

PyTorch框架学习十六——正则化与Dropout

PyTorch框架学习十六——正则化与Dropout一、泛化误差二、L2正则化与权值衰减三、正则化之Dropout补充:这次笔记主要关注防止模型过拟合的两种方法:正则化与Dropout。 一、泛化误差 一般模型的泛化误差可以被分解为三部分:偏差、方差与噪声…

HDU 5510 Bazinga 暴力匹配加剪枝

Bazinga Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid5510 Description Ladies and gentlemen, please sit up straight.Dont tilt your head. Im serious.For n given strings S1,S2,⋯,Sn, labelled from 1 to n, you shou…

PyTorch框架学习十七——Batch Normalization

PyTorch框架学习十七——Batch Normalization一、BN的概念二、Internal Covariate Shift(ICS)三、BN的一个应用案例四、PyTorch中BN的实现1._BatchNorm类2.nn.BatchNorm1d/2d/3d(1)nn.BatchNorm1d(2)nn.Bat…

人工智能影响未来娱乐的31种方式

来源:资本实验室 技术改变生活,而各种新技术每天都在重新定义我们的生活状态。技术改变娱乐,甚至有了互联网时代“娱乐至死”的警语。当人工智能介入我们的生活,特别是娱乐的时候,一切又将大为不同。尽管很多时候我们很…

素数与量子物理的结合能带来解决黎曼猜想的新可能吗?

来源:中国科学院数学与系统科学研究院翻译:墨竹校对:杨璐1972年,物理学家弗里曼戴森(Freeman Dyson)写了一篇名为《错失的机会》(Missed Opportunities)的文章。在该文中&#xff0c…

PyTorch框架学习十八——Layer Normalization、Instance Normalization、Group Normalization

PyTorch框架学习十八——Layer Normalization、Instance Normalization、Group Normalization一、为什么要标准化?二、BN、LN、IN、GN的异同三、Layer Normalization四、Instance Normalization五、Group Normalization上次笔记介绍了Batch Normalization以及它在Py…

重磅!苹果祭出大招:史上最强 Mac 发布,iPad OS 惊艳问世

来源:网络大数据伴随着时间的脚步进入到 6 月份,一年一度的苹果 WWDC 开发者大会又如期到来;这是苹果自举办开发者大会以来的第三十场 WWDC,因而有着不一样的意义。今年的 WWDC 在苹果库比蒂诺总部附近的 San Jose McEnery Convention Center…

PyTorch框架学习十九——模型加载与保存

PyTorch框架学习十九——模型加载与保存一、序列化与反序列化二、PyTorch中的序列化与反序列化1.torch.save2.torch.load三、模型的保存1.方法一:保存整个Module2.方法二:仅保存模型参数四、模型的加载1.加载整个模型2.仅加载模型参数五、断点续训练1.断…