深度学习-核对矩阵维度

在编写深度神经网络程序时,出现的很多问题都是由于矩阵的维度不对引起的,而且这个问题非常难查。而且python有时候还会改变矩阵的维度(例如之前我们学到的python广播化),所以我们需要经常核对矩阵的维度,使他们的维度与我们预料中的保持一致。
深度学习-核对矩阵维度上面是一个五层的神经网络,输入层有2个元素,所以n[0] =2,第一层有三个元素,所以n[1] =3,所以w[1]为(3,2)其他层同理。

因此单个训练样本时各变量的维度公式

w[l] --> (n[l] , n[l-1])

b[l] --> (n[l] , 1)

z[l] --> (n[l] , 1)

a[l] --> (n[l] , 1)

da[l] --> (n[l] , 1)

dz[l] --> (n[l] , 1)

db[l] --> (n[l] , 1)

dw[l] --> (n[l] , n[l-1])

根据上面的公式,下面举例列出第一层的相关变量的维度

W[1] --> (3 , 2)

b[1] --> (3 , 1)

z[1] --> (3 , 1)

a[1]–> (3 , 1)

da[1] --> (3 , 1)

dz[1]–> (3 , 1)

db[1] --> (3 , 1)

dW[1] --> (3 , 2)

那么当多个训练样本时维度公式又是怎么样的呢?多个样本时,我们会通过向量化来提升效率,例如我们会将每个样本的特征x列向量(也就是a[0])一个一个排起来,组成一个矩阵。

下面给出m个训练样本时的维度公式

W[l] --> (n[l] , n[l-1])–> 和单个样本时一样,因为多个样本它们都共用一套W

b[l] --> (n[l], 1) --> 和单个样本时一样,因为多个样本它们都共用一套b

Z[l]–> (n[l] , m)

A[l] --> (n[l] , m)

dA[l] --> (n[l], m)

dZ[l] --> (n[l] , m)

db[l] --> (n[l] , 1) --> db也只有一套,根据公式db = np.sum(dZ) / m可知,db取的是一个平均值

dW[l]–> (n[l] , n[l-1])–> dW也只有一套,同理db