+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-08(85)

2019-09(108)

2019-10(13)

2019-11(11)

2019-12(17)

Pytorch中的激活函数

发布于2020-02-10 17:28     阅读(342)     评论(0)     点赞(3)     收藏(3)


原文地址

分类目录——Pytorch

我的一点理解

在某种意义上讲,深度学习=神经网络
是一个多层处理的过程
x0 -> y_1=f(Wx0) -> y_2=f(Wx1) -> y_3=f(Wx2) -> . . . -> y=f(Wx(n-1))
其中每一层
	先进行一轮“直”(线性的)的操作——y。=Wx,就是个加权,y。中的每一个数据都是对x中所有数据的一个加权和
	再进行一轮“弯”(非线性的)的操作——y_ =f(y。),其中f()是一个非线性的函数,它把直的掰弯,可以构造更多的可能,拓展了深度学习的应用领域
*注:完整的“直”(线性的)操作部分应该还有一个偏置b,即y。= Wx+b,这里为了简化说明,就默认b=0了
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Pytorch是一个机器学习库,封装了大量机器学习的方法,这里说一下其中的激活函数,就是上面说的 f()

直接通过程序说明,解释在代码中注释

  • 导入支持包

    import torch
    import torch.nn.functional as F     # 激励函数都在这
    from torch.autograd import Variable
    
    • 1
    • 2
    • 3
  • 生成输入数据

    # 做一些假数据来观看图像
    x = torch.linspace(-5,5,200).unsqueeze(1)   # .unsqueeze()作用为增加1个维度,x.size=(200,1)
    x = torch.tensor(x)  # x data (tensor), shape=(100, 1)
    x = Variable(x)
    
    • 1
    • 2
    • 3
    • 4
  • “直”(线性)的操作

    激活函数可以理解为 y_=f(Wx) ,

    为了后面更好的观察激活函数的效果, 这里令W=“1”, 即y=x,则y_=f(Wx)=f(x)

    整个网络假设就这么一层

    W = torch.eye(200)   # 对角矩阵
    # 当传入值为5是,W=
    # tensor([[1., 0., 0., 0., 0.],
    #         [0., 1., 0., 0., 0.],
    #         [0., 0., 1., 0., 0.],
    #         [0., 0., 0., 1., 0.],
    #         [0., 0., 0., 0., 1.]])
    W = Variable(W)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • y_ = Wx

    y_ = W.mm(x)     # Wx, mm()是pytorch中的矩阵点乘
    
    • 1
  • 激活

    # 几种常用的 激励函数    y_activate=f(y)=f(Wx)
    y_relu = F.relu(y_)
    y_sigmoid = F.sigmoid(y_)
    y_tanh = F.tanh(y_)
    y_softplus = F.softplus(y_)
    # y_softmax = F.softmax(y)  softmax 比较特殊, 不能直接显示, 不过他是关于概率的, 用于分类
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 作图观察

    # 作图观察
    import matplotlib.pyplot as plt  # python 的可视化模块
    
    plt.figure(1, figsize=(8, 6))
    plt.subplot(221)
    plt.plot(x, y_relu, c='red', label='relu')
    plt.ylim((-1, 5))
    plt.legend(loc='best')
    
    plt.subplot(222)
    plt.plot(x, y_sigmoid, c='red', label='sigmoid')
    plt.ylim((-0.2, 1.2))
    plt.legend(loc='best')
    
    plt.subplot(223)
    plt.plot(x, y_tanh, c='red', label='tanh')
    plt.ylim((-1.2, 1.2))
    plt.legend(loc='best')
    
    plt.subplot(224)
    plt.plot(x, y_softplus, c='red', label='softplus')
    plt.ylim((-0.2, 6))
    plt.legend(loc='best')
    
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    1581047578504

  • 说明

    程序主要来自 激励函数 (Activation),略有修改

    将程序按顺序复制即可执行

  • 参考文献

    激励函数 (Activation)

发布了83 篇原创文章 · 获赞 38 · 访问量 4063


所属网站分类: 技术文章 > 博客

作者:小兔子乖乖

链接: https://www.pythonheidong.com/blog/article/231017/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

3 0
收藏该文
已收藏

评论内容:(最多支持255个字符)