• Pytorch 激活函数


    学习过程知识粗略记录,用于个人理解和日后查看

    包导入

    import torch
    from torch import nn
    from torch import autograd
    import numpy as np
    

    Sinmoid

    非线性函数:f(x)=σ(x)=1/(1+e^(-x))
    缺点: 梯度消失、输出不是0的均值、涉及除法,反向传播求误差的时候计算量大

    '''output->[0,1]'''
    m=nn.Sigmoid()
    input=autograd.Variable(torch.randn(2))
    print(input)
    print(m(input))
    

    output
    在这里插入图片描述

    Tanh

    • 双曲三角函数:f(x)=tanh(x)=(ex-e(-x))/(ex+e(-x))
    • Sinmoid通过简单变换后得到:tanh(x)=2σ(2x)-1
    • 缺点: 梯度消失
    '''out->[-1,1]'''
    m=nn.Tanh()
    input=autograd.Variable(torch.randn(2))
    print(input)
    print(m(input))
    

    output
    在这里插入图片描述

    Hard Tanh

    • 通过给定的阈值直接得到最终结果
    • f(x)=a,x>a; f(x)=b,x<b; f(x)=x,其他
    • eg.f=Hardtanh(-2,2):所有大于2的输入变成2,所有小于-2的输入变成-2,其他的保持不变
    m=nn.Hardtanh(-2,2)
    input=autograd.Variable(torch.randn(10))
    print(input)
    print(m(input))
    

    output
    在这里插入图片描述

    ReLU

    • 线性整流函数,分段函数
    • eg.f(x)=max(0,x):f(x)=x,x>0; f(x)=0,x<0
    • 优点:简单,只需要一个阈值就可以计算结果;在随机梯度下降的训练中收敛会更快,究其原因是因为ReLU是非饱和的

    在这里插入图片描述

    m=nn.ReLU()
    input=autograd.Variable(torch.randn(5))
    print(input)
    print(m(input))
    

    output
    在这里插入图片描述

    ReLU拓展

    # Leaky ReLU:x<0 f(x)=ax (a一般为1e-2),其他不变
    input=autograd.Variable(torch.randn(5))
    m=nn.LeakyReLU(negative_slope=1e-2,inplace=True)# negative_slope->a
    print(input,"
    ->LeakyReLU:",m(input))
    
    # PReLU:f(x)=max(0,x)+α*min(0,x)
    input=autograd.Variable(torch.randn(5))
    m=nn.PReLU(num_parameters=1)# num_parameters->α=>int
    print(input,"
    ->PReLU:",m(input))
    
    # RReLU:Leaky ReLU的随机版本,即参数a随机产生
    input=autograd.Variable(torch.randn(5))
    m=nn.RReLU(1e-4,1e-1,inplace=True)
    print(input,"
    ->RReLU:",m(input))
    
    # ELU: ELU(a)(z)=a(exp(z)-1), z<0;z, z>0
    input=autograd.Variable(torch.randn(5))
    m=nn.ELU(alpha=1e-2,inplace=True)
    print(input,"
    ->ELU:",m(input))
    

    output
    在这里插入图片描述

    Softmax

    • 归一化指数函数 Sinmoid Plus
    • 将每个元素压缩到(0,1),且所有元素之和为1
    • fi(x)=exp(xi)/∑j exp(xj)
    • 传入dim参数,二维下,dim=0,列方向上和为1,dim=1,行方向上和为1
    m=nn.Softmax(dim=0)
    input=autograd.Variable(torch.randn(2,5))
    print(input)
    print(m(input))
    

    output
    在这里插入图片描述

    LogSoftmax

    • 应用于softmax函数前的对输入应用对数的函数
    • fi(x)=log(exp(xi)/∑j exp(xj))
    • 用法和Softmax相同
    m=nn.LogSoftmax(dim=0)
    input=autograd.Variable(torch.randn(2,5))
    print(input)
    print(m(input))
    

    在这里插入图片描述
    如有错误,欢迎指正

    同时发布在CSDN中:https://blog.csdn.net/tangkcc/article/details/119785845

  • 相关阅读:
    转-文件批量重命名
    解决死锁之路(终结篇)
    Python批量修改文件名
    Android AudioTrack分析
    Android Audio介绍
    Android GNSS介绍
    Android HIDL介绍
    【vue】类和内联样式绑定
    【vue】计算属性
    svn post-commit不能同步
  • 原文地址:https://www.cnblogs.com/tangkc/p/15158147.html
Copyright © 2020-2023  润新知