https://blog.csdn.net/dss_dssssd/article/details/83958518​blog.csdn.net

首先需要理解一下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/83990511​blog.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的初始化方式总结相关推荐

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

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

  2. Python进阶-函数默认参数,特别是参数传递为空列表

    这两天遇到函数默认参数的bug,在互联网上好好总结了一下: 如非特别说明,下文均基于Python3 一.默认参数 python为了简化函数的调用,提供了默认参数机制: def pow(x, n = 2 ...

  3. [转载] 详细介绍Python函数中的默认参数

    参考链接: Python函数中的默认参数 详细介绍Python函数中的默认参数 import datetime as dt def log_time(message, time=None): if t ...

  4. 软件测试学习 之 Python 函数默认参数

    转载说明 作者:珞樱缤纷 出处:博客园 博文:Python进阶-函数默认参数 Python进阶-函数默认参数 写在前面 如非特别说明,下文均基于Python3 一.默认参数 python为了简化函数的 ...

  5. 【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )

    文章目录 一. Dart 面向对象 二. 类定义 三. 类的继承 四. 私有变量 五. 可选参数与默认参数 六. 初始化列表 七. 完整代码示例 八. 相关资源 一. Dart 面向对象 OOP 基本 ...

  6. C++类中成员变量的初始化有两种方式

    C++类中成员变量的初始化有两种方式: 构造函数初始化列表和构造函数体内赋值.下面看看两种方式有何不同. 成员变量初始化的顺序是按照在那种定义的顺序. 1.内部数据类型(char,int--指针等) ...

  7. C++经典问题:如果对象A中有对象成员B,对象B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B?

    对象成员特点总结: (1)实例化对象A时,如果对象A有对象成员B,那么先执行对象B的构造函数,再执行A的构造函数. (2)如果对象A中有对象成员B,那么销毁对象A时,先执行对象A的析构函数,再执行B的 ...

  8. 初始化、赋值、默认初始化、列表初始化、类内初始值、直接初始化与拷贝初始化

    文章目录 初始化和赋值的区别 什么是默认初始化? 列表初始化 列表初始化的使用场景 不适合使用列表初始化的场景 类内初始值 混用string对象和C风格字符串 数组与vector对象 关于vector ...

  9. c++构造函数成员初始化中赋值和初始化列表两种方式的区别

    先总结下: 由于类成员初始化总在构造函数执行之前 1)从必要性: a. 成员是类或结构,且构造函数带参数:成员初始化时无法调用缺省(无参)构造函数 b. 成员是常量或引用:成员无法赋值,只能被初始化 ...

  10. [pytorch、学习] - 4.2 模型参数的访问、初始化和共享

    参考 4.2 模型参数的访问.初始化和共享 在3.3节(线性回归的简洁实现)中,我们通过init模块来初始化模型的参数.我们也介绍了访问模型参数的简单方法.本节将深入讲解如何访问和初始化模型参数,以及 ...

最新文章

  1. 火星无人机「机智号」代码开源,1.2w人参与贡献
  2. C++实现CString和string的互相转换(转)
  3. 新书《路由器配置与管理完全手册——Cisco篇》目录抢鲜暴光
  4. 实现checkbox的全选和取消
  5. 寄存器(CPU工作原理)04 - 零基础入门学习汇编语言09
  6. IDEA:Debug使用详解(含2018版特性)
  7. python 数据类型 、运算符
  8. 简单计算机面试题库及答案_计算机专业复试面试问题含答案
  9. linux 4.1.16 ftrace 进程调度,Linux内核进程调度overview(1)
  10. [css] 为什么说css的选择器是从右向左匹配?
  11. 介词at_介词逻辑| 离散数学
  12. 链表合并面试100题系列之18链表合并
  13. 转)SQL 优化原则
  14. 存储过程调用不同数据库的数据
  15. HarmonyOS 开发App详细步骤
  16. 《信号与系统》解读 前言:经典教材的选择
  17. blender3.3在视频中添加文本
  18. ECshop 数据库表结构字段说明
  19. html监控页面大小,JQuery实时监控窗口大小(无需插件)
  20. Linux 网卡配置

热门文章

  1. 机器学习笔记(二十):逻辑回归(2)
  2. 【RWM】基于matlab路由无线传感器网络模拟随机路点运动模型【含Matlab源码 1565期】
  3. 【心电信号】基于matlab瞬时抑制心电信号IIR滤波【含Matlab源码 1533期】
  4. 【图像加密】基于matlab仿射变换数字图象置乱【含Matlab源码 1171期】
  5. 【图像重建】基于matlab GUI投影法图像重建【含Matlab源码 861期】
  6. lucky前面加a还是an_加方法 || 让孩子赶超学霸!这份小学英语知识精编,千万不能错过啦!...
  7. ai人工智能软件_您应该了解的5家创新AI软件公司
  8. ai人工智能操控什么意思_为什么要建立AI分散式自治组织(AI DAO)
  9. java-练习2:MobilePhone
  10. 利用swap()函数来收缩内存