连接网络的原理,连接的原理是,连接网络的原理,连接的原理区别
全连接网络原理上一期介绍了只有一个隐层的浅层全连接网络,本期介绍了更通用的深层全连接网络。我建议先看上一期的内容,对理解会更有帮助。最后一期的链接是:
https://blog.csdn.net/Iseno_V/article/details/102941210
推导部分还是截图的形式。如果你需要源文件,请给我留言。
1.网络结构图下图是一个四层全连接网络,有2个分类问题。
2.原则2.1参数一致的详细解释
2.2正向传播过程
2.3反向传播过程
2.4算法总结
3.代码实施
整个全连接网络的源代码架构如下图所示:
python代码实现为:
#-*-编码:UTF-8-*- 创建于2019年11月13日19:59:16 @作者:iseno _ v import numpy as NP #生成训练和测试数据#数据是一个二维点,以半径为5的圆为原点作为分界线,用于区分正负样本#参数:m是数据集大小#返回值:返回数据和标记def createdata(m):x1=NP . zeros([2,int (m/2)]) int(m/2)]) L1=0 L2=0而L1m/2: a=np.random.rand(1,1)*10 b=np.random.rand(1,1)*10如果a**2 b**2=25: X1[0,L1]=a X1[1,L1]=b L1=1而L2m/2: a=np.random.rand(1,1)*10 b=NP . rand(1,1)* 10如果a**2 b**2 EXP(-z))# sigmoid函数的导数def dgdz (z): returnnp。EXP (-z)/((1NP。EXP (-z)) * * 2) #迭代次数I=100000#网络层数(不包括输入层)L=5#数据集大小m=10000#每层神经元数(包括输入层)n=np.array([2,3,5,4,2,1])#初始化网络参数W=[1]#W没有意义,也就是说输入层没有参数W,也就是说输入层没有参数b,这里只要给I一个数值占位符在range (1,L1): W. append (NP。Random.rand (n [I],n[I-1])* 0.001 b . append(NP。Random.rand (n [I],1)*0.001) #初始化训练数据和测试数据x _ train,y _ train=createdata (m) x _ test,y _ test=createdata (m) #对range(I)中的I开始迭代:#正向传播过程初始化Z=[1]#Z的第一个元素是无意义的,也就是说输入层没有参数Z,这里只要给一个数值占位符A=[X_train] #对range (1, L1): ZJ=np.dot (w [j],a[j-1])b[j]aj=g(ZJ)z . append(ZJ)a . append(aj)if(I 1)00==0:j=-(NP . dot(y _ train,np.log(A[L])。 T) (np.dot((1-Y_train),NP.log (1-A [L])。T))/m print (step=% d,cost function=% .14f% (i1,j)) #反向传播过程初始化da=[0]*(L1)da[L]=(-NP . dot)1.0/(1-a[L])。t))/m #范围内j的反向传播过程(l,0,-1): dzj=np.multiply (da [j],dgdz (z [j])) dwj=np.dot (dzj,a keep dims=true)da[j-1]=NP . dot(w[j].t,dzj)w[j]=w[j]-alpha A * dwjb[j]=B[j]-alpha A * dbj #测试过程A=[x _ test]for A[j-1])B[j]aj=g(ZJ)A . append(aj)Y _ hat=(A[L]0.5)。astype(NP . int)rate=1-NP . sum(NP . ABS(Y _ test-Y _ hat))/(m)print( accuracy={ 0 } 。格式(汇率))
代码运行结果:
最高分类准确率达96%,效果尚可。经过多次实验,发现大多数情况下分类准确率可以达到93%以上。
算法分析:
因为使用了sigmoid函数,当参数过大时,梯度会变小,整个网络的收敛速度会变慢。这个问题可以考虑