Chapter3_神经网络

神经网络

输入层(第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()
output_4_0.png

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()
output_7_0.png

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()
output_9_0.png

输出层的激活函数

一般而言,回归问题用恒等函数,分类问题用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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容