神经网络中的激活函数

第一种:阶跃函数(即不是0就是1)

由于参数x只能接受实数(浮点型),即允许sigmoid(3.0)的调用,而不允许参数取numpy数组,所以为了便于后面操作,我们需要修改为支持Numpy数组的实现。(其实当我们学神经网络时,需要频繁调用Numpy库中的array创建数组,所以我们基本上所有代码都要考虑支持Numpy数组实现) 例如阶跃函数

#阶跃函数
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)
y=step_function(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)
plt.show()
print(step_function(np.array([-1,2,3,-4])))

 由于阶跃函数的处理太过于“粗糙”,太局限了,我们尝试使用其他函数作为激活函数,其中比较具有代表性的有sigmoid函数,Relu函数

sigmoid函数

 通过python实现该函数

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

这里由于Numpy的广播功能,所以sigmoid函数能支持Numpy数组,所以代码无需写成支持Numpy数组的形式。

完整代码如下

#sigmoid函数
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()

通过计较可以看出sigmoid更具有平滑性,而这对神经网络的学习具有重要意义,另一点是阶跃函数只能返回0或1,而sigmoid函数由于平滑性可以返回连续的实数信号值

Relu函数

这是我们最近主要使用的函数

 

代码如下

#Relu函数
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)
plt.ylim(-1,5)
plt.show()

然后我们可以获得Relu函数图像

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值