torch 默认参数初始化_pytorch的初始化方式总结
首先需要理解一下self.modules() 和 self.children(),self.children()好理解,就是一个nn网络结构的每一层,包括了隐层、激活函数层等等,而self.modules包含的更多,除了每一层之外,还包含了整个网络结构,这个网络结构的子结构等等,具体的看上面的链接就可以了。
PyTorch 学习笔记(四):权值初始化的十种方法www.cnblogs.com
常用的初始化方法的api接口可见,考虑到目前常用的激活函数基本是relu家族系列的,所以kaiming初始化用的会比较多一些。
然后是关于如何每一层初始化,torch的方式很灵活:
https://blog.csdn.net/dss_dssssd/article/details/83990511blog.csdn.net
1、一层网络定义一个初始化:
layer1 = torch.nn.Linear(10,20)
torch.nn.init.xavier_uniform_(layer1.weight)
torch.nn.init.constant_(layer1.bias, 0)
定义一层用一个初始化的昂发,比较麻烦;
2、使用apply
def weights_init(m): # 1classname = m.__class__.__name__ # 2if classname.find('Conv') != -1: # 3nn.init.normal_(m.weight.data, 0.0, 0.02) # 4elif classname.find('BatchNorm') != -1: # 5nn.init.normal_(m.weight.data, 1.0, 0.02) # 6nn.init.constant_(m.bias.data, 0) # 7 netG.apply(weights_init) # 8
这语法和pandas非常类似,贼灵活,可以根据不同层进行不同的初始化设置,如果嫌麻烦直接:
def weights_init(m): nn.init.normal_(m.weight.data, 0.0, 0.02)
netG.apply(weights_init)
这样就统一进行了同一种的初始化。
3、使用for loop循环配合self.modules
class Net(nn.Module):def __init__(self, in_dim, n_hidden_1, n_hidden_2, out_dim):super().__init__()self.layer = nn.Sequential(nn.Linear(in_dim, n_hidden_1), nn.ReLU(True),nn.Linear(n_hidden_1, n_hidden_2),nn.ReLU(True),nn.Linear(n_hidden_2, out_dim))# 迭代循环初始化参数for m in self.children():if isinstance(m, nn.Linear):nn.init.constant_(m.weight, 1)nn.init.constant_(m.bias, -100)# 也可以判断是否为conv2d,使用相应的初始化方式 elif isinstance(m, nn.Conv2d):nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')elif isinstance(m, nn.BatchNorm2d):nn.init.constant_(m.weight.item(), 1)nn.init.constant_(m.bias.item(), 0) def forward(self, x):x = self.layer(x)return x
model = Net(in_dim, n_hidden_1, n_hidden_2, out_dim)
考虑到apply比较便于复用,感觉还是第二种方式好一些。
torch 默认参数初始化_pytorch的初始化方式总结相关推荐
- pytorch默认初始化_PyTorch的初始化
背景 在使用PyTorch深度学习框架的时候,不管是训练还是测试,代码中引入PyTorch的第一句总是: import torch 在Gemfield前述专栏文章里,我们已经得知,torch/csrc ...
- Python进阶-函数默认参数,特别是参数传递为空列表
这两天遇到函数默认参数的bug,在互联网上好好总结了一下: 如非特别说明,下文均基于Python3 一.默认参数 python为了简化函数的调用,提供了默认参数机制: def pow(x, n = 2 ...
- [转载] 详细介绍Python函数中的默认参数
参考链接: Python函数中的默认参数 详细介绍Python函数中的默认参数 import datetime as dt def log_time(message, time=None): if t ...
- 软件测试学习 之 Python 函数默认参数
转载说明 作者:珞樱缤纷 出处:博客园 博文:Python进阶-函数默认参数 Python进阶-函数默认参数 写在前面 如非特别说明,下文均基于Python3 一.默认参数 python为了简化函数的 ...
- 【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )
文章目录 一. Dart 面向对象 二. 类定义 三. 类的继承 四. 私有变量 五. 可选参数与默认参数 六. 初始化列表 七. 完整代码示例 八. 相关资源 一. Dart 面向对象 OOP 基本 ...
- C++类中成员变量的初始化有两种方式
C++类中成员变量的初始化有两种方式: 构造函数初始化列表和构造函数体内赋值.下面看看两种方式有何不同. 成员变量初始化的顺序是按照在那种定义的顺序. 1.内部数据类型(char,int--指针等) ...
- C++经典问题:如果对象A中有对象成员B,对象B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B?
对象成员特点总结: (1)实例化对象A时,如果对象A有对象成员B,那么先执行对象B的构造函数,再执行A的构造函数. (2)如果对象A中有对象成员B,那么销毁对象A时,先执行对象A的析构函数,再执行B的 ...
- 初始化、赋值、默认初始化、列表初始化、类内初始值、直接初始化与拷贝初始化
文章目录 初始化和赋值的区别 什么是默认初始化? 列表初始化 列表初始化的使用场景 不适合使用列表初始化的场景 类内初始值 混用string对象和C风格字符串 数组与vector对象 关于vector ...
- c++构造函数成员初始化中赋值和初始化列表两种方式的区别
先总结下: 由于类成员初始化总在构造函数执行之前 1)从必要性: a. 成员是类或结构,且构造函数带参数:成员初始化时无法调用缺省(无参)构造函数 b. 成员是常量或引用:成员无法赋值,只能被初始化 ...
- [pytorch、学习] - 4.2 模型参数的访问、初始化和共享
参考 4.2 模型参数的访问.初始化和共享 在3.3节(线性回归的简洁实现)中,我们通过init模块来初始化模型的参数.我们也介绍了访问模型参数的简单方法.本节将深入讲解如何访问和初始化模型参数,以及 ...
最新文章
- 火星无人机「机智号」代码开源,1.2w人参与贡献
- C++实现CString和string的互相转换(转)
- 新书《路由器配置与管理完全手册——Cisco篇》目录抢鲜暴光
- 实现checkbox的全选和取消
- 寄存器(CPU工作原理)04 - 零基础入门学习汇编语言09
- IDEA:Debug使用详解(含2018版特性)
- python 数据类型 、运算符
- 简单计算机面试题库及答案_计算机专业复试面试问题含答案
- linux 4.1.16 ftrace 进程调度,Linux内核进程调度overview(1)
- [css] 为什么说css的选择器是从右向左匹配?
- 介词at_介词逻辑| 离散数学
- 链表合并面试100题系列之18链表合并
- 转)SQL 优化原则
- 存储过程调用不同数据库的数据
- HarmonyOS 开发App详细步骤
- 《信号与系统》解读 前言:经典教材的选择
- blender3.3在视频中添加文本
- ECshop 数据库表结构字段说明
- html监控页面大小,JQuery实时监控窗口大小(无需插件)
- Linux 网卡配置
热门文章
- 机器学习笔记(二十):逻辑回归(2)
- 【RWM】基于matlab路由无线传感器网络模拟随机路点运动模型【含Matlab源码 1565期】
- 【心电信号】基于matlab瞬时抑制心电信号IIR滤波【含Matlab源码 1533期】
- 【图像加密】基于matlab仿射变换数字图象置乱【含Matlab源码 1171期】
- 【图像重建】基于matlab GUI投影法图像重建【含Matlab源码 861期】
- lucky前面加a还是an_加方法 || 让孩子赶超学霸!这份小学英语知识精编,千万不能错过啦!...
- ai人工智能软件_您应该了解的5家创新AI软件公司
- ai人工智能操控什么意思_为什么要建立AI分散式自治组织(AI DAO)
- java-练习2:MobilePhone
- 利用swap()函数来收缩内存