CNN中的前向传播 及其Python代码实现

符号约定

A表示卷积的结果矩阵,W表示滤波器(filter)矩阵,b表示偏置(bias)矩阵,stride表示卷积步长,nh nw分别表示矩阵的高和宽,nc表示通道(channel)数,也就是矩阵的第三维

推导

见如下图,其中prev表示上层卷积结果

CNN中的前向传播 及其Python代码实现_第1张图片

下面是层间的关系表达式

CNN中的前向传播 及其Python代码实现_第2张图片

前向传播函数Python代码

def conv_forward(A_prev,W,b,hparameters):
    (m,n_H_prev,n_W_prev,n_C_prev)=A_prev.shape
    (f,f,n_C_prev,n_C)=W.shape
    stride=hparameters['stride']
    pad=hparameters['pad']
    n_H=1+int((n_H_prev-f+2*pad)/stride)
    n_W=1+int((n_W_prev-f+2*pad)/stride)
    Z=np.zeros((m,n_H,n_W,n_C))#init output
    A_prev_pad=zero_pad(A_prev,pad)
    for i in range(m):
        a_prev_pad=A_prev_pad[i]
        for h in range(n_H):
            for w in range(n_W):
                for c in range(n_C):
                    vert_start=h*stride
                    vert_end=vert_start+f
                    horiz_start=w*stride
                    horiz_end=horiz_start+f
                    a_slice_prev=a_prev_pad[vert_start:vert_end,horiz_start:horiz_end,:]
                    Z[i,h,w,c]=np.sum(np.multiply(a_slice_prev,W[:,:,:,c])+b[:,:,:,c])
    cache=(A_prev,W,b,hparameters)
    return Z,cache

 

你可能感兴趣的:(Artificial,Intelligence)