本文主要是介绍深度学习入门之im2col函数的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
此篇博客为作者对《深度学习入门——基于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=1out_w = (W + 2*pad - filter_w)//stride + 1 #输出数据宽#np.pad教程: https://blog.csdn.net/hustqb/article/details/77726660img = np.pad(input_data, [(0,0), (0,0), (pad, pad), (pad, pad)], 'constant')#初始化一个六维数组 (数据个数, 通道数, 滤波器高, 滤波器宽, 输出高, 输出宽)col = np.zeros((N
这篇关于深度学习入门之im2col函数的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!