Python手撕实现正向卷积操作

面试的时候让手撕正向卷积,当时懵了一下然后按照卷积的定义磕磕巴巴写了个大概,现在修改整理一下,博主也是深度学习刚入门,有错误的话请指出。
输入:NHWC
kernel:k*k*C_input*C_output
输出:outputs

def conv2d_forward(inputs, kernel):
    outputs = []
    for n in range(C_output): # 遍历每个卷积核
        h = (H-k+2*padding)/strides + 1
        w = (W-k+2*padding)/strides + 1
        output = [[bias]*range(w) for _ in range(h)]
        for c in range(C): # 输入的每个通道做卷积
	        for i in range(h):
	            for j in range(w):
	                output[i][j] += sum(np.multiply(inputs[c][i:k+i][j:k+j],kernel[n][c]))
        outputs.append(output)
    return outputs

时间复杂度: C _ o u t p u t ( 输 出 卷 积 核 的 通 道 数 ) ∗ C ( 输 入 的 通 道 数 , 也 就 是 卷 积 核 的 个 数 ) ∗ ( h ∗ w ) ( 输 出 特 征 图 的 尺 寸 ) ∗ k 2 ( 卷 积 核 的 尺 寸 ) C\_output(输出卷积核的通道数)*C(输入的通道数,也就是卷积核的个数)*(h*w)(输出特征图的尺寸)*k^2(卷积核的尺寸) C_output()C()(hw)()k2()

原理可以参考:https://cs231n.github.io/convolutional-networks/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值