Chapter3_神经网络

♀尐吖头ヾ 提交于 2020-02-05 12:03:49

神经网络

输入层(第0层)->中间层(隐藏层)->输出层(最后一层)

隐藏层的激活函数

  • 将输入信号的总和转换为输出信号.决定如何来激活输入信号的总和
  • 先计算输入信号的加权总和(带偏置),然后用激活函数转换这一总和
    \[ a = b+\omega_1x_1+\omega_2x_2\\ y = h(a) \]

阶跃函数

以阈值为界,一旦输入超过阈值,就切换输出

#阶跃函数的实现
import numpy as np
def step_function(x):
    y = x > 0
    return y.astype(np.int)
step_function(np.array([-1.0,1.0,2.0]))
array([0, 1, 1])
#绘制阶跃函数的图形
import matplotlib.pylab as plt
x = np.arange(-5.0,5.0,0.1)
y = step_function(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)#指定y轴的范围
plt.show()

sigmoid函数

\[ h(x) = \frac{1}{1+exp(-x)} \]

#sigmoid函数的实现
def sigmoid(x):
    return 1/(1+np.exp(-x))
x = np.array([-1.0,1.0,2.0])
sigmoid(x)
array([0.26894142, 0.73105858, 0.88079708])
#绘制sigmoid函数的图像
x = np.arange(-5.0,5.0,0.1)
y1 = sigmoid(x)
plt.plot(x,y1)
plt.ylim(-0.1,1.1)
plt.show()

ReLU函数

Rectified Linear Unit函数在输入大于0时,直接输出该值;在输入小于等于0时,输出0
\[ h(x)=\begin{cases} x,& \text{$x>0$}\\ 0,& \text{$x\leq 0$} \end{cases} \]

#ReLU函数的实现
def relu(x):
    return np.maximum(0,x)

#绘制ReLU函数的图像
x = np.arange(-5.0,5.0,0.1)
y = relu(x)
plt.plot(x,y)
plt.ylim(-1.0,5.0)
plt.show()

输出层的激活函数

一般而言,回归问题用恒等函数,分类问题用softmax函数

  • 恒等函数:将输入按原样输出,对于输入的信息,不加以任何改动的直接输出
  • softmax函数
    \[ y_k=\frac{exp(a_k)}{\sum_{i=1}^nexp(a_i)} \]
    输出层共有n个神经元,计算第k个神经元的输出\(y_k\)
#softmax函数的实现
def softmax(a):
    exp_a = np.exp(a)
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    
    return y

softmax函数的注意事项
softmax函数在实现中要进行指数函数的运算,此时指数函数的值很容易变得非常大.超大值之间进行除法运算,会出现"不确定"的情况
改进
\[ y_k = \frac{exp(a)k)}{\sum_{i=1}^nexp(a_i)}=\frac{exp(a_k+C)}{\sum_{i=1}^nexp(a_i+C)} \]

def softmax(a):
    c = np.max(a)
    exp_a = np.exp(a-c)
    sum_exp_a = np.sum(exp_a)
    y  =exp_a / sum_exp_a
    
    return y
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!