深度学习入门之im2col函数的实现

本文是关于深度学习中im2col函数的笔记,介绍了该函数用于加速卷积运算的原理和作用。通过实例解析了im2col如何将输入数据降维并进行矩阵运算,以替代繁琐的for循环。建议在学习深度学习之前掌握Python和numpy基础知识。
摘要由CSDN通过智能技术生成

此篇博客为作者对《深度学习入门——基于Python的理论和实现》一书中的im2col函数的笔记

1 学习该函数前需要具备什么知识?

需要了解卷积的相关知识

2 im2col函数的作用(为什么要使用im2co函数)?

卷积运算需要好几层for语句,这样实现麻烦,而且numpy中存在使用for语句变慢的缺点,所以不使用for语句,而用im2col函数代替。

im2col全称image to column(从图像到矩阵),作用为加速卷积运算。即把包含批数量的4维数据转换成2维数据。(也就是将输入数据降维,然后通过numpy的矩阵运算后得到结果,再将结果的形状还原,从而通过用矩阵运算来代替for循环语句)

卷积运算的处理流(批处理)
卷积运算的处理流(批处理)

如图所示,输入数据为四维(N, C, H, W),分别为数据个数, 通道数, 高, 长

                 滤波器为四维(FN, C, FH, FW),分别为滤波器个数, 通道数, 滤波器高, 滤波器长

                 输出数据为四维(N, FN, OH, OW),分别为数据个数, 通道数, 高, 长

代码如下:

def im2col(input_data, filter_h, filter_w, stride=1, pad=0):
    """

    Parameters
    ----------
    input_data : 由(数据量, 通道, 高, 长)的4维数组构成的输入数据
    filter_h : 滤波器的高
    filter_w : 滤波器的长
    stride : 步幅
    pad : 填充
    Returns
    -------
    col : 2维数组
    """
    N, C, H, W = input_data.shape  #数据量、 通道、 高、 宽
    #输出数据高宽可由以下公式计算,不懂的同学可以去看卷积的相关知识(就是一个数学公式而已,记住就好)
    out_h = (H + 2*pad - filter_h)//stride + 1  #输出数据高 //表示向下取整除法  例:3//2=1
    out_w = (W + 2*pad - filter_w)//stride + 1  #输出数据宽
    #np.pad教程:   https://blog.csdn.net/hustqb/article/details/77726660
    img = np.pad(input_data, [(0,0), (0,0), (pad, pad), (pad, pad)], 'constant')
    #初始化一个六维数组  (数据个数, 通道数, 滤波器高, 滤波器宽, 输出高, 输出宽)
    col = np.zeros((N, C, filter_h, filter_w, out_h, out_w))  #六维
    #循环产生col数组,具体解释见代码下面
    for y in range(fil
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值