卷积前向传播实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_27643275/article/details/88855709
import numpy as np

def cnn_forward(input, conv_filter, pad, stride=1):
    w, h, ci = input.shape
    k, k, _, co = conv_filter.shape
    padded_layer = np.pad(input, ((pad,), (pad,), (0,)), 'constant', constant_values=(0,))
    w_out = 1 + (w + 2 * pad - k) // stride
    h_out = 1 + (h + 2 * pad - k) // stride
    out = np.zeros((w_out, h_out, co))
    # 对每个输出空间位置(i,j)和每个深度列k
    for i in range(w_out):
        for j in range(h_out):
            layer_in_mask = padded_layer[i * stride:i * stride + k, j * stride:j * stride + k, :]
            for k in range(co):
                out[i, j, k] = np.sum(layer_in_mask * conv_filter[:, :, :, k])
    return out


猜你喜欢

转载自blog.csdn.net/baidu_27643275/article/details/88855709