参考博客https://buptldy.github.io/2016/10/01/2016-10-01-im2col/
# -*- coding:utf8 -*-
import numpy as np
import time
import timeit
#手动实现卷积操作 假设输入图片,核均为正方形,通道数为1,核数量为3,步幅为1,填充为0
X = np.array([[1,2,0],[1,1,3],[0,2,2]])
K = np.array([[[1,1,],[2,2]],[[1,1],[1,1]],[[0,1],[1,0]]])
number =3
kernel_size = 2
# 普通卷积,对应项相乘再求和
def conv_op(bottom,b_size,kernel,kernel_size,number,stride,padding):
top_size = (b_size + 2*padding - kernel_size)/stride+1
top = np.zeros(shape=(number,top_size,top_size))
for c in range(number):#第c个核
for h in range(top_size):#竖直方向第h次截取图的部分
for w in range(top_size):#水平方向第w次
# 先滑动窗口取部分图 依次乘第c个kernel并求和 赋给特征图对应位置
top[c,h,w] = np.sum(bottom[h*stride:h*stride&