全连接网络与激活函数、权值初始化---------Pytorch

1、线性
    # in_features 输入结点数
    # out_features 输出结点数
    # bias 是否要偏置
    nn.Linear(in_features,out_features,bias=True)
2、激活函数
    2.1 nn.Sigoid
        # 输出(0,1)
        # 导数[0,0.25],易梯度消失
        y = 1/(1+e**(-x))
    2.2 nn.tanh
        # 输出(-1,1)
        # 导数(0,1),易梯度消失
    2.3 nn.ReLU
        # 导数1时易梯度爆炸
    
    2.4 nn.LeakyReLU(negative_slope)
        # negative_slope:负半轴斜率
    2.5 nn.PReLU(init)
        # init:斜率可学习
    2.6 nn.RReLU(lower,upper)
        # 负半轴每个点的斜率均从均匀分布中采样
        # lower:均匀分布下限
        # upper:均匀分布上限
      
3、利用权值初始化防止梯度消失或爆炸
    @不用权值初始化方法
    # 使用批标准化

    @为何权值初始化
    # 数据过大可能权值爆炸(梯度爆炸),过小可能丢失数据(梯度消失)
    
    # 利用合适的初始化方法使每一层方差为1
    # 方差一致性:保持数据维持在恰当尺度,通常方差为1
    3.1 计算激活函数增益:计算激活函数的方差变化尺度
        # nonlinearity:激活函数名称
        # param:激活函数参数,如Leaky_ReLU的negative_slope
        nn.init.calculate_gain(nonlinearity,param=None)
    3.1 Xavier初始化(适合饱和函数:如Sigmoid、Tanh)
    3.2 Kaiming初始化(适合ReLU及其变种)
    
    class MLP(nn.Module):
        def __init__(self,input_size,hidden_size):
            super(lstmT,self).__init__()
        def forward(self,X):
        # 权值初始化
        def initialize(self):
            for m in self.modules():
                if isinstance(m,nn.Linear):
                    '''tanh激活函数'''
                    # 计算激活函数增益
                    tanh_gain = nn.init.calculate_gain('tanh')
                    # 权值初始化(xavier_uniform_)
                    nn.init.xavier_uniform_(m.weight.data,gain=tanh_gain)
                    '''ReLU激活函数'''
                    nn.init.kaiming_normal_(m.weight.data)
    net = MLP(neural_nums,layer_nums)
    # 权值初始化
    net.initialize()

权值初始化方法:
# 无论哪种方法都要遵循方差一致原则,即要使每一层方差为1
1、Xavier均匀分布
2、Xavier正态分布

3、Kaiming均匀分布
4、Kaiming正态分布

5、均匀分布
6、正态分布
7、常数分布

8、正交矩阵初始化
9、单位矩阵初始化
10、稀疏矩阵初始化

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值