大家伙在学习深度学习的卷积网络里有一个填充的问题是难免遇到的 所以np给了pad()这个函数来实现填充 但是多维度(大多数情况下是三维的)的pad函数却很难理解 博主就稍微写一点自己的理解 试图帮助大家理解 不喜勿喷 谢谢!
import numpy as np
arr1D = np.array([1, 1, 2, 2, 3, 4])
'''不同的填充方法'''
print 'constant: ' + str(np.pad(arr1D, (2, 3), 'constant'))
print 'edge: ' + str(np.pad(arr1D, (2, 3), 'edge'))
print 'linear_ramp: ' + str(np.pad(arr1D, (2, 3), 'linear_ramp'))
print 'maximum: ' + str(np.pad(arr1D, (2, 3), 'maximum'))
print 'mean: ' + str(np.pad(arr1D, (2, 3), 'mean'))
print 'median: ' + str(np.pad(arr1D, (2, 3), 'median'))
print 'minimum: ' + str(np.pad(arr1D, (2, 3), 'minimum'))
print 'reflect: ' + str(np.pad(arr1D, (2, 3), 'reflect'))
print 'symmetric: ' + str(np.pad(arr1D, (2, 3), 'symmetric'))
print 'wrap: ' + str(np.pad(arr1D, (2, 3), 'wrap'))
运行结果:
constant连续一样的值填充,有关于其填充值的参数。constant_values=(x, y)时前面用x填充,后面用y填充。缺参数是为0000。。。
edge用边缘值填充
linear_ramp边缘递减的填充方式
maximum, mean, median, minimum分别用最大值、均值、中位数和最小值填充
reflect, symmetric都是对称填充。前一个是关于边缘对称,后一个是关于边缘外的空气对称╮(╯▽╰)╭
wrap用原数组后面的值填充前面,前面的值填充后面
也可以有其他自定义的填充方法
import numpy as np
arr3D = np.array([[[1, 1, 2, 2], [1, 1, 2, 2], [1, 1, 2, 2],[1, 1, 2, 2]],
[[5, 1, 2, 6], [5, 1, 2, 6], [5, 1, 2, 6], [5, 1, 2, 6]],
[[1, 1, 2, 2], [1, 1, 2, 2], [1, 1, 2, 2], [1, 1, 2, 2]]])
平面表示:
“立体”表示:
print 'constant: \n' + str(np.pad(arr3D, ((1, 1), (2, 2), (2, 2)), 'constant'))
二维:
“三维”:
仔细观察可以看出来np.pad(arr3D, ((1, 1), (2, 2), (2, 2)), ‘constant’)中第二个参数的第一个数组(1,1)表示在三维数组的“前后”各加一个“层”,第二个数组(2, 2)表示在数组的“上下”各加两个“行”,
第三个数组(2, 2)表示在数组的“左右”各加两个“列” 即图中的状态。
更多维度的时候 依次类推 但是在深度学习中 更多的是通道数为三的图片 而且 第一个数组一般为(0,0).
感谢大家收看!
部分例子由https://blog.csdn.net/hustqb/article/details/77726660借鉴。