
0607-参数初始化策略
发布日期:2021-05-09 05:37:06
浏览次数:15
分类:博客文章
本文共 2106 字,大约阅读时间需要 7 分钟。
0607-参数初始化策略
目录
pytorch完整教程目录:
一、参数初始化策略概述
深度学习中,一个好的参数初始化策略可以让模型更快地收敛,而一个差的参数初始化策略可能会让模型很难进行收敛,反复震荡甚至崩溃。
nn.Module
中的参数一般都采取了比较合适的初始化策略,因此一般我们不需要考虑。不过我们也可以自定义一个参数初始化策略代替系统默认的,比如当我们使用 Parameter 时,由于 t.Tensor()
返回的是内存中的随机数,很可能会有极大值,这会时训练网络时造成溢出或者梯度小时,因此此时自定义一个参数的初始化策略尤为重要。
torch 中的 nn.init
模块专门为初始化设计,实现了一些常用的初始化侧路了,而且就算如果某种初始化策略 nn.init
不提供,用户也可以自己直接初始化。
二、利用 nn.init 初始化
Glorot 正态分布初始化方法,也称作 Xavier 正态分布初始化,参数由 0 均值,标准差为 \(\sqrt{\frac{2}{(fan_{in} + fan_{out}})}\) 的正态分布产生,其中\(fan_{in}\) 和 \(fan_{out}\) 是分别权值张量的输入和输出元素数目。这种初始化同样是为了保证输入输出的方差不变,但是原论文中 [1]
是基于线性函数推导的,同时在 tanh 激活函数上有很好的效果,但不适用于ReLU激活函数。
\[std=gain×\sqrt{\frac{2}{fan_{in}+fan_{out}}}\]
看不懂就别看了,我都没仔细看,百度 copy 来的。
参考:[1] Understanding the difficulty of training deep feedforward neural networks — Glorot, X. & Bengio, Y. (2010)
import torch as tfrom torch import nnfrom torch.nn import initlinear = nn.Linear(3, 4)t.manual_seed(1)# 等价于 linear.weight.data.normal_(0, std)init.xavier_normal_(linear.weight) #
Parameter containing:tensor([[ 0.3535, 0.1427, 0.0330], [ 0.3321, -0.2416, -0.0888], [-0.8140, 0.2040, -0.5493], [-0.3010, -0.4769, -0.0311]], requires_grad=True)
三、直接初始化
import matht.manual_seed(1)# xavier初始化的计算公式std = math.sqrt(2) / math.sqrt(7.)linear.weight.data.normal_(0, std)
tensor([[ 0.3535, 0.1427, 0.0330], [ 0.3321, -0.2416, -0.0888], [-0.8140, 0.2040, -0.5493], [-0.3010, -0.4769, -0.0311]])
# 对模型的所有参数进行初始化for name, params in net.named_parameters(): if name.find('linear') != -1: # 对所有全连接层的参数进行初始化 # init linear params[0] # weight params[1] # bias elif name.find('conv') != -1: pass elif name.find('norm') != -1: pass
---------------------------------------------------------------------------NameError Traceback (most recent call last)in 1 # 对模型的所有参数进行初始化----> 2 for name, params in net.named_parameters(): 3 if name.find('linear') != -1: # 对所有全连接层的参数进行初始化 4 # init linear 5 params[0] # weightNameError: name 'net' is not defined
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年03月25日 22时43分05秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[转]收集Oracle UNDO诊断信息脚本
2021-05-09
【QML 快速入门】属性(Properties)
2021-05-09
音视频基础知识---像素格式YUV(转)
2021-05-09
C++9018:2333/2235——柠檬汽水(Lemonade Line)
2021-05-09
力扣 - 430. 扁平化多级双向链表
2021-05-09
C++高精度模板
2021-05-09
错题重错之WYT的刷子 单调队列
2021-05-09
关于结构体的初始化
2021-05-09
洛谷 P6851 【onu】贪心
2021-05-09
联赛模拟测试20 B. Walk (建图)
2021-05-09
联赛模拟测试23 D. 真相 思维题
2021-05-09
莫队学习笔记
2021-05-09
牛顿迭代学习笔记
2021-05-09
Scala中的空
2021-05-09
FeWeb基础之JavaScript简介
2021-05-09
设计模式学习笔记(二十三:解释器模式)
2021-05-09
Deepin_使用Python+MySQL创建工作日志记录
2021-05-09
ASP.NET Core 一步步搭建个人网站(4)_主页和登录验证
2021-05-09
ADF 第五篇:转换数据
2021-05-09
Databricks 第4篇:pyspark.sql 分组统计和窗口
2021-05-09