zoukankan      html  css  js  c++  java
  • PyTorch学习系列(九)——参数_初始化

    from:http://blog.csdn.net/VictoriaW/article/details/72872036

    之前我学习了神经网络中权值初始化的方法

    那么如何在pytorch里实现呢。

    PyTorch提供了多种参数初始化函数:

    注意上面的初始化函数的参数tensor,虽然写的是tensor,但是也可以是Variable类型的。而神经网络的参数类型Parameter是Variable类的子类,所以初始化函数可以直接作用于神经网络参数。

    示例:

    self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3)
    init.xavier_uniform(self.conv1.weight)
    init.constant(self.conv1.bias, 0.1)
    

    上面的语句是对网络的某一层参数进行初始化。如何对整个网络的参数进行初始化定制呢?

     
    def weights_init(m):
        classname=m.__class__.__name__
        if classname.find('Conv') != -1:
            xavier(m.weight.data)
            xavier(m.bias.data)
    net = Net()
    net.apply(weights_init) #apply函数会递归地搜索网络内的所有module并把参数表示的函数应用到所有的module上。   
    

    不建议访问以下划线为前缀的成员,他们是内部的,如果有改变不会通知用户。更推荐的一种方法是检查某个module是否是某种类型:

    def weights_init(m):
        if isinstance(m, nn.Conv2d):
            xavier(m.weight.data)
            xavier(m.bias.data)     
    
  • 相关阅读:
    選定下拉列表的方法
    JAVA学习路线
    封装
    重写(Overriding)
    java内存泄露
    学习实例.文章管理.文章类.Article.java
    方法重载
    学习实例.文章管理.分页查询类.Page.java
    学习实例.文章管理.目标与经验总结
    Java多线程1
  • 原文地址:https://www.cnblogs.com/lindaxin/p/8037561.html
Copyright © 2011-2022 走看看