本文已参与「新人创作礼」活动,一起开启掘金创作之路。
4.单层神经网络示例代码
网络结构见图3.1
请点击下面的超链接跳转至github页面:
用logistic回归实现一层神经网络用来识别猫的图片
其中Logistic_Regression_with_a_Neural_Network_mindset.ipynb文件包含详细的注释和图示,但需要在jupyternotebook中运行;Logistic_Regression_with_a_Neural_Network_mindset.py文件可直接用“python”命令运行,两者的功能是一样的。
5.两层神经网络
5.1.前向传播
XW[1]b[1]Z[1]A[1]W[2]b[2]Z[2]A[2]Y=[x(1),x(2),⋯,x(m)]=[w1[1],w2[1],⋯,wn1[1]]T=[b1[1],b2[1],⋯,bn1[1]]=W[1]X+b[1]=g[1](Z[1])=[w1[2],w2[2],⋯,wn2[2]]T=[b1[2],b2[2],⋯,bn2[2]]=W[2]A[1]+b[2]=g[2](Z[2])=[y(1),y(2),⋯,y(m)](5-1)
(5−1)中从上到下的顺序可以代表前向传播过程。
5.2.反向传播
dZ[2]dW[2]db[2]dA[1]dZ[1]dW[1]db[1]=A[2]−Y=m1dZ[2]A[1] T=m1np.sum(dZ[2],axis=1,keepdims=True)=W[2]TdZ[2]=dA[1]∗g[1]′(Z[1])=m1dZ[1]A[0] T=m1np.sum(dZ[1],axis=1,keepdims=True)(5-2)
(5−2)中从上到下的顺序可以代表前向传播过程。
5.3.关于参数的初始化
在单层神经网络(logistic回归)中,可以将参数初始化wie全零值;但是在多层神经网络中,W不能初始化为0,否则每一层的各个节点对应的W会训练成一样的值;b可以初始化为0 W不能初始化为特别大,浅层网络一般是0.01量级;因为太大了的话,激活函数的自变量要么正向很大,要么负向很大,导致斜率趋近于0 ,收敛速度很慢。尤其是你使用sigmoid或tanh激活函数。如果不使用这些激活函数,但是你是二分类问题(输出层是sigmoid函数),也会出现这个问题.
5.4.2层神经网络示例代码
对如下二维平面上的点进行分类:

图5.1 二维平面上的非线性二分类数据集例子
网络结构如下:

图5.2 2层神经网络结构例子
点击下面的超链接查看完整代码:
2层神经网络的示例代码
其中Palnar_data_clf_with_one_hidden_layer.ipynb文件包含详细的注释和图示,但需要在jupyternotebook中运行;Palnar_data_clf_with_one_hidden_layer.py文件可直接用“python”命令运行,两者的功能是一样的。
6.深层神经网络
6.1.每层的参数及变量的尺寸
\end{aligned}
6.2.前向传播递推公式
XW[l]b[l]Z[l]A[l]W[l+1]b[l+1]Z[l+1]A[l+1]Y=[x(1),x(2),⋯,x(m)]=[w1[l],w2[l],⋯,wnl[l]]T=[b1[l],b2[l],⋯,bnl[l]]=W[l]A[l−1]+b[l]=g[l](Z[l])=[w1[l+1],w2[l+1],⋯,wnl+1[l+1]]T=[b1[l+1],b2[l+1],⋯,bn2[l+1]]=W[l+1]A[l]+b[l+1]=g[l+1](Z[l+1])=[y(1),y(2),⋯,y(m)](6-2)
6.3.反向传播递推公式
dZ[l]dW[l]db[l]dA[l−1]=dA[l]∗g[l]′(Z[l])=m1dZ[l]A[l−1] T=m1np.sum(dZ[l],axis=1,keepdims=True)=W[l]TdZ[l](6-3)
6.4.多层神经网络的示例代码
点击如下超链接。
对比了2层神经网络和5层神经网络在对猫分类时的性能
Deep Neural Network - Application.py
Deep Neural Network - Application.ipynb