使用Numpy进行卷积运算

# 互相关计算
def correlation_calc(view, kernel):
    return np.sum(view * kernel)


def numpy_conv(inputs, kernel, strides, padding):
    in_channels, H, W = inputs.shape
    kernel_c, kernel_h, kernel_w = kernel.shape
    assert kernel_c == in_channels
    stride_h, stride_w = strides
    padding_h = padding[0]
    padding_w = padding[1]
    # 构造padding后的输入
    padding_data = np.zeros((in_channels, H + 2 * padding_h, W + 2 * padding_w))
    padding_data[:, padding_h: H + padding_h, padding_w: W + padding_w] = inputs
    # 构造输出
    out_h = (H + 2 * padding_h - kernel_h) // stride_h + 1
    out_w = (W + 2 * padding_w - kernel_w) // stride_w + 1

    outputs = np.zeros((out_h, out_w))
    # 滑动窗口
    for i in range(out_h):
        for j in range(out_w):
            view = padding_data[:, i * stride_h: i * stride_h + kernel_h, j * stride_w: j * stride_w + kernel_w]
            outputs[i][j] = correlation_calc(view, kernel)
    return outputs

输出多通道计算

def multi_channels_conv(inputs, kernels, strides, padding):
    outputs = []
    for kernel in kernels:
        outputs.append(numpy_conv(inputs, kernel, strides, padding))
    return numpy.array(outputs)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值