【深度学习】卷积前向传播实现

import numpy as np

def conv_forward(input, filter, stride, pad):
    n, c_in, h_in, w_in = input.shape
    c_out, c_in, k1, k2 = filter.shape

    inp_pad = np.pad(input, ((0, 0), (0, 0), (pad, pad), (pad, pad)), 'constant')
    h_out = (h_in + 2 * pad - k1) / stride + 1
    w_out = (w_in + 2 * pad - k2) / stride + 1
    output = np.zeros((n, c_out, h_out, w_out))

    for i in range(n):
        for j in range(c_out):
            for k in range(h_out):
                for z in range(w_out):
                    output[i, j, k, z] = (inp_pad[i, :, k * stride: k * stride + k1, z * stride : z * stride + k2] * filter[i, :, :, :]).sum()


def pool_forward(input, kernel, stride, mode = 'max'):
    n, c, h, w = input.shape

    h_out = h // stride
    w_out = w // stride
    output = np.zeros((n, c, h_out, w_out))

    for i in range(n):
        for j in range(c):
            for k in range(h_out):
                for z in range(w_out):
                    if mode == 'max':
                        output[i, j, k, z] = (input[i, j, k * stride : k * stride + kernel, z * stride: z * stride + kernel]).max()
                    elif mode == 'avg':
                        output[i, j, k, z] = (input[i, j, k * stride: k * stride + kernel, z * stride: z * stride + kernel]).mean()



参考:
https://mp.weixin.qq.com/s/hzVC6r12SZ0qnFUgI51R6g
https://mp.weixin.qq.com/s/n41NGFxTFhw271ubBA_cMg

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值