在学习cnn的时候,看了网上好多关于np.pad这个函数的理解,说实话,好多不太对,经过自己的尝试和理解,想做下总结,方便其他人学习。
举个例子,比较浅显易懂:
import numpy as np
a = [[1, 2, 3], [1, 3, 4], [1, 2, 3]]
print(np.pad(a, ((1, 2), (3, 4)), 'constant', constant_values=0))
其中,((2, 2), (2, 2))是矩阵上面增加一行,下面增加一行,左边增加一列,右边增加一列,采用的是‘constant’的方式,增加的常数值是0。
再举个三维的例子。
import numpy as np
arr3D = np.array([[[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4]],
[[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5]],
[[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4]]])
print(np.pad(arr3D, ((0, 0), (2, 2), (3, 2)), 'constant', constant_values=0))
三维的矩阵可以看成是空间上有三张图片从前往后依次叠加,第一个矩阵
[[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4]]看成是第一张图片,同理,剩下的两个矩阵分别是第二张第三张图片。
再看pad里面的参数((0, 0), (2, 2), (3, 2)),与二维一样,代表的是增加的行列数,分别是前面增加了0张图片,后面增加了0张图片;所有图片上面增加了2行,下面增加了2行;左边增加了3列,右边增加了2列。这些数值可以按照自己想要填补的数值进行修改即可。
个人觉得这个函数比较难理解的就是参数这一块,搞清楚规则就没问题了。