Python 神经网络中两个隐层的反向传播和正向传播

Python 神经网络中两个隐层的反向传播和正向传播,python,neural-network,deep-learning,Python,Neural Network,Deep Learning,我的问题是当隐藏单元数大于1时,深层神经网络的正向和反向传播 我知道如果我有一个隐藏层,我必须做什么。在单个隐藏层的情况下,如果我的输入数据X\u列具有n样本,具有d数量的特征(即X\u列是(n,d)维度矩阵,y\u列是(n,1)维度向量)如果我在第一个隐藏层中有h1个隐藏单元,那么我使用Z_h1=(X_train*w_h1)+b_h1(其中w_h1是一个带有随机数项的权重矩阵,它的形状(d,h1),b_h1是一个带有形状(h1,1)的偏差单元)。我使用乙状结肠激活A_h1=sigmoid(Z_

我的问题是当隐藏单元数大于1时,深层神经网络的正向和反向传播

我知道如果我有一个隐藏层,我必须做什么。在单个隐藏层的情况下,如果我的输入数据
X\u列
具有
n
样本,具有
d
数量的特征(即
X\u列
(n,d)
维度矩阵,
y\u列
(n,1)
维度向量)如果我在第一个隐藏层中有
h1
个隐藏单元,那么我使用
Z_h1=(X_train*w_h1)+b_h1
(其中
w_h1
是一个带有随机数项的权重矩阵,它的形状
(d,h1)
b_h1
是一个带有形状
(h1,1)的偏差单元)
。我使用乙状结肠激活
A_h1=sigmoid(Z_h1)
,发现
A_h1
Z_h1
都有形状
(n,h1)
。如果我有
t
输出单元的数量,那么我使用带有尺寸
(h1,t)
b_out
的权重矩阵
获取输出
Z_out=(A_h1*w_h1)+b_h1
。从这里我可以得到
A_out=sigmoid(Z_out)
具有形状
(n,t)
如果我在第一个隐藏层之后和输出层之前有第二个隐藏层(单位数为h2),那么我必须向正向传播添加哪些步骤,我应该修改哪些步骤?


我还知道如何处理单隐层神经网络的反向传播。对于上一段中的单隐层示例,我知道在第一个反向传播步骤
(输出层->隐藏层1)
,我应该执行
步骤1\u BP1:Err\u out=A\u out-y\u train\u onehot
(此处
y\u-train\u-onehot
y\u-train
的onehot表示法
Err\u-out
具有形状
(n,t)
。接下来是
步骤2\u BP1:delta\u-w\u-out=(A\u h1)^t*Err\u-out
delta\u-b\u-out=sum(Err\u-out)
。符号
()^T
表示矩阵的转置。对于第二个反向传播步骤
(隐藏层1->输入层)
,我们执行以下
步骤1\u BP2:sig\u derivu h1=(A\u h1)*(1-A\u h1)
。这里
sig\u derivu h1
具有形状
(n,h1)
。在下一步中,我执行
步骤2\u BP2:Err uh1=\Sum\u I\Sum\Sum\u j[(Err_{i,j}*sig_derivu h1{i,j})
]在这里,
erru h1
具有形状
(n,h1)
。在最后一步中,我执行
步骤3:delta_w_h1=(X_列)^T*erru h1
delta_b_h1=sum(Err_h1)
如果我有第二个隐藏层(h2个单元数),我应该添加哪些反向传播步骤在第一个隐藏层之后和输出层之前?我是否应该修改我在这里描述的一个隐藏层情况的反向传播步骤?

对于正向传播,第一个隐藏层的输出尺寸必须与第二个输入层的尺寸相适应

如上所述,您的输入具有维度
(n,d)
。隐藏层1的输出将具有维度
(n,h1)
。因此第二个隐藏层的权重和偏差必须分别为
(h1,h2)
(h1,h2)

因此
w_h2
将是
(h1,h2)
维度,
b_h2
将是
(h1,h2)

输出层的权重和偏差尺寸将为
w_输出
尺寸将为
(h2,1)
b_输出
尺寸将为
(h2,1)


在反向传播中也必须重复相同的操作。

● 设X为具有形状
(n,d)
的样本矩阵,其中
n
表示样本数量,
d
表示特征数量

● 设wh1为形状权重矩阵
(d,h1)
,以及

● 设bh1为形状
(1,h1)
的偏差向量

向前传播和向后传播需要执行以下步骤:

正向传播:

第1步:

Zh1=[X•wh1]+bh1

↓ ↓ ↓ ↓

(n,h1)
(n,d)
(d,h1)
(1,h1)

这里,符号•表示矩阵乘法,
h1
表示第一隐藏层中隐藏单元的数量

第2步:

Φ()为激活函数,得到

ah1=Φ(Zh1)

↓ ↓

(n,h1)
(n,h1)

第三步:

获得新的权重和偏差:

wh2形状
(h1,h2)
,以及

bh2形状
(1,h2)

第4步:

Zh2=[ah1•wh2]+bh2

↓ ↓ ↓ ↓

(n,h2)
(n,h1)
(h1,h2)
(1,h2)

这里,
h2
是第二个隐藏层中隐藏单元的数量

第5步:

ah2=Φ(Zh2)

↓ ↓

(n,h2)
(n,h2)

第6步:

获得新的权重和偏差:

wout的形状
(h2,t)
,以及

关于形状
(1,t)

这里,
t
是类的数量

第7步:

Zout=