卷积层中的im2col函数

im2col:image to column,即“从图像到矩阵”

 

Part1:为什么要用im2col函数

实现CNN中的卷积运算,若使用for循环:

1.需要几层for循环

2.NumPy存在使用for语句处理后变慢的缺点

 (NumPy访问元素最好不使用for语句)

 

Part2:im2col函数的功能

将输入数据展开以适合滤波器(权重)

对于输入数据,将应用滤波器的区域横向展开为1列,即将数据展开为2维矩阵

 

Part3:im2col函数

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

  • input_data —— 由(数据量,通道,高,长)的4维数组构成的输入数据
  • filter_h —— 滤波器的高
  • filter_w —— 滤波器的长
  • stride —— 步幅
  • pad —— 填充 

 

Part3:im2col函数的实现

import sys, os
import numpy as np
sys.path.append(os.pardir)
from common.util import im2col

x1 = np.random.rand(1, 3, 7, 7) # 批大小为1、通道为3的7x7数据
col1 = im2col(x1, 5, 5, stride=1, pad=0)
print(col1.shape)  # (9,75)

x2 = np.random.rand(10, 3, 7, 7)  # 10个数据
col2 = im2col(x2, 5, 5, stride=1, pad=0)
print(col2.shape)  # (90,75)

如上所述的两个im2col函数实现的例子,均为数据形状相同(通道为3的7x7数据)的数据,第一个例子的批大小为1,第二个批大小为10。在两个例子中,第2维的元素个数均为75,这是滤波器(通道为3、大小为5x5)的元素个数的总和。

 

Q1: 输出矩阵为什么是9和90行的?

A1: 原始矩阵是7x7的,步幅为1,填充为0,所以5x5的卷积核在每个方向要“走”3次,因此3x3=9;

      也就是说,当步幅设置为1、填充设置为1时,原始矩阵扩充为9x9的矩阵,这样5x5的卷积核在每个方向要“走”5次,这时候的输出矩阵即为5x5=25行;

Q2: 什么是批?

A2: 这里的批可以类比成图的张数,而通道数可以理解为在每张图片上提取的层数。

 

 

斋藤康毅.深度学习原理入门:基于Python的理论与实现[M].北京:人民邮电出版社,2020.

评论 2 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

AA_WangZai

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值