从感知机到神经网络
输入层、中间层(隐藏层)、输出层
实际权重层数=输入层+中间层+输出层-1
激活函数
激活函数:通过感知机接收信号x1、x2……,计算加权信号与偏置的总和a=Σ(w1 * x1+w2 * x2+……)+b,利用激活函数h()将a转换为输出y=h(a)
信号:连续实数值信号
simoid函数:(计算量更大,有梯度为0的情况)
h ( x ) = 1 / ( 1 + e x p ( − 1 ) ) h(x)=1/(1+exp(-1)) h(x)=1/(1+exp(−1))def simoid(x): return 1/(1+np.exp(-x))
ReLU函数:(学习率需要设计较小)
h ( x ) = { x x > 0 0 x ≤ 0 h(x)=\left\{ \begin{array}{rcl} x & & {x > 0}\\ 0 & & {x \leq 0} \end{array} \right. h(x)={x0x>0x≤0def relu(x): return np.maximum(0,x)
隐藏层激活函数h(),输出层激活函数σ()
回归问题用恒等函数;
分类问题用softmax函数
y k = e x p ( a k + c ) Σ e x p ( a i + c ) y^k=\frac{exp(ak+c)}{Σexp(ai+c)} yk=Σexp(ai+c)exp(ak+c)i为[1,n],n是输出层神经元个数, y k y_k yk为第k个神经元输出,c防止溢出
输出层激活函数定为恒等函数
def identity_function(x): return x
输出激活函数定为softmax函数( softmax函数输出值总和为1)
def softmax(a): c=np.max(a) exp_a=np.exp(a-c)#c防止溢出 sum_exp_a=np.sum(exp_a) y=exp_a/sum_exp_a return y
阶跃函数
import numpy as np import matplotlib.pylab as plt def step_function(x): return np.array(x>0,dtype=np.int) def simoid(x): return 1/(1+np.exp(-x)) def relu(x): return np.maximum(0,x)
x=np.arange(-5.0,5.0,0.1) y=step_function(x) z=simoid(x) r=relu(x) plt.plot(x,y,linestyle="--",label="step") plt.plot(x,z,label="simoid") plt.plot(x,r,label="ReLU") plt.ylim(-0.1,1.1)#指定y轴范围 plt.legend() plt.show()
多维数组的运算
#多维数组/张量
#矩阵乘法,维度需要保持一致
A=np.array([[1,2],[3,4],[5,6]])
B=np.array([7,8])#1*2 0r 2*1
C=np.array([[1,3,5],[2,4,6]])
print(A.shape)
print(B.shape)
print(C.shape)
print(np.dot(A,B))
print(np.dot(B,C))
多层神经网络的实现
- 信号,权重,偏置
#信号,权重,偏置
X=np.array([1.0,0.5])
W1=np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
B1=np.array([0.1,0.2,0.3])
A1=np.dot(X,W1)+B1
Z1=simoid(A1)
print(A1)
print(Z1)
- 第一层到第二层的信号传递
#第一层到第二层的信号传递
W2=np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
B2=np.array([0.1,0.2])
A2=np.dot(Z1,W2)+B2
Z2=simoid(A2)#第一层输出变成第二层输入
print(A2)
print(Z2)
- 第二层到输出层的信号传递
W3=np.array([[0.1,0.3],[0.2,0.4]])
B3=B2
A3=np.dot(Z2,W3)+B3
Y=identity_function(A3)#or Y=A3
print(Y)
输出层的设计
一般输出激活函数为σ()
#输出层激活函数定为恒等函数
def identity_function(x):
return x
#输出激活函数定为softmax函数
def softmax(a):
c=np.max(a)
exp_a=np.exp(a-c)#c防止溢出
sum_exp_a=np.sum(exp_a)
y=exp_a/sum_exp_a
return y
W3=np.array([[0.1,0.3],[0.2,0.4]])
B3=B2
A3=np.dot(Z2,W3)+B3
Y=identity_function(A3)#or Y=A3
print(Y)
本文含有隐藏内容,请 开通VIP 后查看