版权声明:本文为博主原创文章,未经博主允许不得转载。 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