使用python/numpy实现im2col的学习心得

使用python/numpy实现im2col的学习心得

背景

最近在看深度学习的东西。使用的参考书是《深度学习入门——基于python的理论与实现》。在看到7.4时,里面引入了一个im2col的函数,从而方便讲不断循环进行地相乘相加操作变成矩阵的运算,通过空间资源换取时间效率。

为什么要这么操作和操作以后col矩阵的样子比较好理解。由于对python和numpy不太熟悉,理解书上给出的程序实现想了很久。终于有点感觉了,记录下来。

书上的程序

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
    out_w = (W + 2*pad - filter_w)//stride + 1

    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))

    for y in range(filter_h):
        y_max = y + stride*out_h
        for x in range(filter_w):
            x_max = x + stride*out_w
            col[:, :, y, x, :, :] = img[:, :, y:y_max:stride, x:x_max:stride]

    col = col.transpose(0, 4, 5, 1, 2, 3).reshape(N*out_h*out_w, -1)
    return col

分析

首先只考虑一个数据,即此时 N = 1 N=1 N=1。并且假设数据只有一层,比如灰度图,即

  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
im2col是一个常用的图像处理函数,用于将输入的图像转换为矩阵形式。它的作用是将图像的每个局部区域(通常是滑动窗口)转换为一列,并将所有列按顺序排列成一个矩阵。 具体来说,im2col函数接受三个参数:输入图像、滑动窗口大小和步幅。它首先根据滑动窗口大小和步幅计算出输出矩阵的大小,然后遍历输入图像的每个局部区域,将每个区域展开为一列,并按顺序排列在输出矩阵中。 下面是一个示例代码: ```python import numpy as np def im2col(input_image, window_size, stride): # 计算输出矩阵的大小 output_height = (input_image.shape[0] - window_size) // stride + 1 output_width = (input_image.shape[1] - window_size) // stride + 1 # 创建输出矩阵 output_matrix = np.zeros((window_size * window_size, output_height * output_width)) # 遍历输入图像的每个局部区域 for i in range(output_height): for j in range(output_width): # 获取当前局部区域 local_region = input_image[i*stride:i*stride+window_size, j*stride:j*stride+window_size] # 将局部区域展开为一列,并按顺序排列在输出矩阵中 output_matrix[:, i*output_width+j] = local_region.flatten() return output_matrix ``` 这段代码实现了一个简单的im2col函数。它接受一个输入图像、滑动窗口大小和步幅作为参数,并返回一个展开后的矩阵。 使用im2col函数可以方便地对图像进行卷积操作。通过将输入图像转换为矩阵形式,可以使用矩阵乘法来实现卷积运算,从而提高计算效率。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值