美文网首页
第三章-神经网络-激活函数

第三章-神经网络-激活函数

作者: 风清云淡Python | 来源:发表于2018-11-27 21:43 被阅读0次

激活函数

(1)阶跃函数

当输入超过0时,输出1,否则输出0

def step_function(x):
    if x > 0:
        return 1
    else:
        return 0

但是,这个函数的缺陷在于函数的输入参数只能是一个数值,而不能是NumPy数组

改进
import numpy as np
x = np.array([-1.23,2.566,3.3344])
# 对NumPy进行不等号运算
y = x > 0
print(y)
# astype()函数用来转换NumPy数组的类型
y = x.astype(np.int)
print(y)

astype()函数用来转换NumPy数组的类型
对NumPy进行不等号运算

阶跃函数的代码实现
# coding: utf-8
import numpy as np
import matplotlib.pylab as plt

def step_function(x):
    return np.array(x > 0, dtype=np.int)

X = np.arange(-5.0, 5.0, 0.1)#从-5到5,步长为0.1
Y = step_function(X)#给阶跃函数传进NumPy数组,对每个元素做不等号运算,再以int类型输出。
plt.plot(X, Y)
plt.ylim(-0.1, 1.1)  # 指定图中绘制的y轴的范围
plt.show()

np.arange(-5.0, 5.0, 0.1)#从-5到5,步长为0.1
ylim(-0.1, 1.1) # 指定图中绘制的y轴的范围

阶跃函数

(2)sigmoid函数

sigmoid函数作为激活函数
其公式为:


sigmoid function

sigmoid 函数的实现代码:

# coding: utf-8
import numpy as np
import matplotlib.pylab as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))    

X = np.arange(-5.0, 5.0, 0.1)
Y = sigmoid(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1)
plt.show()

当输入的x是NumPy数组时,结果也能被正确计算,因为 np.exp(-x)会生成一个NumPy数组,用到了NumPy的广播功能。

(3)阶跃函数与sigmoid函数的比较

# coding: utf-8
import numpy as np
import matplotlib.pylab as plt


def sigmoid(x):
   return 1 / (1 + np.exp(-x))    


def step_function(x):
   return np.array(x > 0, dtype=np.int)

x = np.arange(-5.0, 5.0, 0.1)
y1 = sigmoid(x)
y2 = step_function(x)

plt.plot(x, y1, label="sigmoid")
plt.plot(x, y2, 'k--', label="step")
plt.ylim(-0.1, 1.1) #指定图中绘制的y轴的范围
plt.title('step function & sigmoid function')
plt.legend()#用于显示各条线对应的label
plt.show()
image.png

(1)sigmoid函数的平滑性对神经网络的学习具有重要意义。
(2)这两个函数的取值范围都在0-1之间
(3)两个函数都是非线性函数

神经网络中的激活函数必须是非线性函数,否则使用线性函数,加深神经网络的层数就没有意义了。

eg:有个三层的神经网络,激活函数为:h(x)=cx, y(x)=h(h(h(x)))=cccx=c^3x.

为了发挥多层神经网络带来的优势,激活函数必须使用非线性函数。

问题:为什么神经网络的层数多一些会好?

答:不是说仅仅层数越多效果越好,这个还取决于你的激活函数,还有各种超参数的设置等等。同意 @Eslavill 的观点,层数多了,网络表达能力更强了,第一层学习个直线,第二层学习个基本的几何图形,第三层再学习个更复杂的图形。

(4)ReLU函数(Rectified Linear Unit)

ReLU函数在输入大于0的时候,直接输出该值,在输入小于等于0时,输出0.
ReLU函数的公式为:


ReLU函数的实现代码

# coding: utf-8
import numpy as np
import matplotlib.pylab as plt

def relu(x):
    return np.maximum(0, x)

x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)
plt.plot(x, y, label="ReLU")
plt.ylim(-1.0, 5.5) #指定图中绘制的y轴的范围
plt.title('ReLU')
plt.legend()#用于显示各条线对应的label
plt.show()

这里使用了NumPy的maximum()函数,该函数会从输入的数值中选择较大的那个进行输出。

相关文章

  • 3. 深度学习- 常用的激活函数

    在学习神经网络中,我们会常常碰到激活函数这个名词。那么什么是激活函数?激活函数激活的是什么?在神经网络中,有什么用...

  • 机器学习笔记(五)——激活函数

    激活函数区别和作用 本质:    激活函数是来向神经网络中引入非线性因素,通过激活函数,神经网络就可以拟合各种曲线...

  • 机器学习之神经网络

    什么是神经网络 就是使用了平滑的激活函数的多层感知机 激活函数 什么是激活函数呢? 激活函数就是从输入值到对应输出...

  • 开学季,你要的激活函数都在这里

    摘要:激活函数就是神经网络输出端的一个节点,来连接两个神经网络。激活函数都有哪些类型?让我们继续阅读。 什么是激活...

  • 机器学习中常见函数

    1、激活函数 常用于神经网络,激活函数增加了神经网络模型的非线性特征 2、损失函数 机器学习过程中中,我们期望样本...

  • ReLu(Rectified Linear Units)激活函数

    Sigmoid函数以及传统线性函数 在ReLU激活函数出现之前,神经网络训练都是勇Sigmoid作为激活函数。其中...

  • 激活函数与损失函数

    激活函数 1、作用: 线性模型的表达能力不够,激活函数增加神经网络模型的非线性,提升神经网络模型表达能力(数据往往...

  • 神经网络相关词汇翻译

    neural networks 神经网络 activation function 激活函数 hyperbolic ...

  • 神经网络的激活函数总结

    导言 激活函数在神经网络中具有重要的地位。在SIGAI之前的公众号文章“理解神经网络的激活函数”中,我们回答了3个...

  • 激活函数 sigmoid、tanh、relu

    激活函数(activation functions)的目标是,将神经网络非线性化。激活函数是连续的(continu...

网友评论

      本文标题:第三章-神经网络-激活函数

      本文链接:https://www.haomeiwen.com/subject/jqbwqqtx.html