models.init_weight

import torch.nn as nn


def init_weights(model):
    # kaiming高斯初始化,使得每一卷积层的输出的方差都为1
    # torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')
    # a :Relu函数的负半轴斜率
    # mode:表示让前向传播还是反向传播的输出方差为1
    for m in model.modules():
        if isinstance(m, nn.Conv2d):
            nn.init.kaiming_normal_(m.weight.data,
                                    mode='fan_out',
                                    nonlinearity='relu')
        elif isinstance(m, nn.BatchNorm2d):
            # Batchnorm层一共有两个需要学习的参数:
                # scale因子,初始化为1,shift因子,初始化为0
            m.weight.data.fill_(1)
            m.bias.data.zero_()

kaiming高斯初始化
kaiming高斯初始化,使得每一卷积层的输出的方差都为1,权值的初始化方法如下:
models.init_weight_第1张图片

  • a为Relu或Leaky Relu的负半轴斜率,
  • nl为输入的维数:nl=卷积核边长2 x channel数
torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')
  • a :Relu函数的负半轴斜率
  • mode:表示让前向传播还是反向传播的输出方差为1
    • fan_in:前向传播
    • fan_out:反向传播
  • nonlinearity:
    • relu
    • leaky_relu

你可能感兴趣的:(PySOT)