当前位置:   article > 正文

Numpy的array数组和TensorFlow的tensor张量的padding操作(实质数组空间形状理解)_numpy array padding

numpy array padding
  1. Numpy的array数组补0操作
  2. #二维数组row=3,col=2(3,2)
  3. data1 = np.array([[1,2],[3,4],[5,6]])
  4. #补0模式,一维位置前后补(一层)0,二维位置前后补(一层)0
  5. pad_width1 = ((1,1),(1,1))
  6. data1_p = np.pad(data1, pad_width=pad_width1, mode='constant', constant_values=0)
  7. print(data1_p)
  8. >>>[[0 0 0 0]
  9.  [0 1 2 0]
  10.  [0 3 4 0]
  11.  [0 5 6 0]
  12.  [0 0 0 0]]
  13. #更好理解可体现在索引的操作上面,在(3,2)索引上(3+2,2+2)=(5,4)
  14. print(np.shape(data1_p))
  15. >>>(5,4)
  16. #三维数组heights=2,weights=2,channels=2
  17. data2 = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
  18. print(np.shape(data2))
  19. >>>(2,2,2)
  20. print(data2)
  21. >>>[[[1 2]
  22.   [3 4]]
  23.  [[5 6]
  24.   [7 8]]]
  25. #分别在height,weights,channels的前后补(加一层)0
  26. #直接看结果有点难理解,结合补0前后索引的变化和三维空间立方体更容易理解!
  27. pad_width2 = ((1, 1), (0, 0),(0, 0))
  28. data2_p = np.pad(data2, pad_width=pad_width2, mode='constant', constant_values=0)
  29. print(np.shape(data2_p))
  30. print(data2_p)
  31. >>>(4, 2, 2)
  32. >>>[[[0 0]
  33.   [0 0]]
  34.  [[1 2]
  35.   [3 4]]
  36.  [[5 6]
  37.   [7 8]]
  38.  [[0 0]
  39.   [0 0]]]
  1. pad_width3 = ((0, 0), (1, 1),(0, 0))
  2. data3_p = np.pad(data2, pad_width=pad_width3, mode='constant', constant_values=0)
  3. print(np.shape(data3_p))
  4. print(data3_p)
  5. >>>(2, 4, 2)
  6. >>>[[[0 0]
  7.   [1 2]
  8.   [3 4]
  9.   [0 0]]
  10.  [[0 0]
  11.   [5 6]
  12.   [7 8]
  13.   [0 0]]]
  14. pad_width4 = ((0, 0), (0, 0),(1, 1))
  15. data4_p = np.pad(data2, pad_width=pad_width4, mode='constant', constant_values=0)
  16. print(np.shape(data4_p))
  17. print(data4_p)
  18. >>>(2, 2, 4)
  19. >>>[[[0 1 2 0]
  20.   [0 3 4 0]]
  21.  [[0 5 6 0]
  22.   [0 7 8 0]]]
  1. 重点理解比较下面两种padding位置的区别
  2. data3 = np.array([[[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]],
  3. [[[13,14,15], [16,17,18]],[[19,20,21], [22,23,24]]]])
  4. print(np.shape(data3))
  5. print(data3)
  6. >>>(2, 2, 2, 3)
  7. >>>[[[[ 1  2  3]
  8.    [ 4  5  6]]
  9.   [[ 7  8  9]
  10.    [10 11 12]]]
  11.  [[[13 14 15]
  12.    [16 17 18]]
  13.   [[19 20 21]
  14.    [22 23 24]]]]
  15. #height位置前后补(加一层)0,weight位置前后补(加一层)0,
  16. pad_width5 = ((0, 0), (1, 1),(1, 1),(0, 0))
  17. data5_p = np.pad(data3, pad_width=pad_width5, mode='constant', constant_values=0)
  18. print(np.shape(data5_p))
  19. print(data5_p)
  20. >>>(2, 4, 4, 3)
  21. >>>[[[[ 0  0  0]
  22.    [ 0  0  0]
  23.    [ 0  0  0]
  24.    [ 0  0  0]]
  25.   [[ 0  0  0]
  26.    [ 1  2  3]
  27.    [ 4  5  6]
  28.    [ 0  0  0]]
  29.   [[ 0  0  0]
  30.    [ 7  8  9]
  31.    [10 11 12]
  32.    [ 0  0  0]]
  33.   [[ 0  0  0]
  34.    [ 0  0  0]
  35.    [ 0  0  0]
  36.    [ 0  0  0]]]
  37.  [[[ 0  0  0]
  38.    [ 0  0  0]
  39.    [ 0  0  0]
  40.    [ 0  0  0]]
  41.   [[ 0  0  0]
  42.    [13 14 15]
  43.    [16 17 18]
  44.    [ 0  0  0]]
  45.   [[ 0  0  0]
  46.    [19 20 21]
  47.    [22 23 24]
  48.    [ 0  0  0]]
  49.   [[ 0  0  0]
  50.    [ 0  0  0]
  51.    [ 0  0  0]
  52.    [ 0  0  0]]]]
  53. data4 = np.array([[[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]],
  54. [[13,14,15], [16,17,18]],[[19,20,21], [22,23,24]]]])
  55. print(np.shape(data4))
  56. print(data4)
  57. >>>(1, 4, 2, 3)
  58. >>>[[[[ 1  2  3]
  59.    [ 4  5  6]]
  60.   [[ 7  8  9]
  61.    [10 11 12]]
  62.   [[13 14 15]
  63.    [16 17 18]]
  64.   [[19 20 21]
  65.    [22 23 24]]]]
  66. pad_width6 = ((0, 0), (1, 1),(1, 1),(0, 0))
  67. #height位置前后补(加一层)0,weight位置前后补(加一层)0,
  68. data6_P = np.pad(data4, pad_width=pad_width6, mode='constant', constant_values=0)
  69. print(np.shape(data6_P))
  70. print(data6_P)
  71. >>>(1, 6, 4, 3)
  72. >>>[[[[ 0  0  0]
  73.    [ 0  0  0]
  74.    [ 0  0  0]
  75.    [ 0  0  0]]
  76.   [[ 0  0  0]
  77.    [ 1  2  3]
  78.    [ 4  5  6]
  79.    [ 0  0  0]]
  80.   [[ 0  0  0]
  81.    [ 7  8  9]
  82.    [10 11 12]
  83.    [ 0  0  0]]
  84.   [[ 0  0  0]
  85.    [13 14 15]
  86.    [16 17 18]
  87.    [ 0  0  0]]
  88.   [[ 0  0  0]
  89.    [19 20 21]
  90.    [22 23 24]
  91.    [ 0  0  0]]
  92.   [[ 0  0  0]
  93.    [ 0  0  0]
  94.    [ 0  0  0]
  95.    [ 0  0  0]]]]
  1. #channel横切面channel = 0的位置
  2. print((data3[:,:,:,0]))
  3. >>>[[[ 0  0  0  0]
  4.   [ 0  1  4  0]
  5.   [ 0  7 10  0]
  6.   [ 0 13 16  0]
  7.   [ 0 19 22  0]
  8.   [ 0  0  0  0]]]
  1. 0 0 0 0
  2. 0 1 4 0
  3. 0 7 10 0
  4. 0 13 16 0
  5. 0 19 23 0
  6. 0 0 0 0
  7. #weight位置前后补(加一层)0,channel位置前后补(加一层)0,
  8. pad_width7 = ((0, 0), (0, 0),(1, 1),(1, 1))
  9. data7_P = np.pad(data4, pad_width=pad_width7, mode='constant', constant_values=0) print(np.shape(data6_P))
  10. print(data7_P)
  11. >>>(1, 4, 4, 5)
  12. >>>[[[[ 0  0  0  0  0]
  13.    [ 0  1  2  3  0]
  14.    [ 0  4  5  6  0]
  15.    [ 0  0  0  0  0]]
  16. [[ 0  0  0  0  0]
  17.    [ 0  7  8  9  0]
  18.    [ 0 10 11 12  0]
  19.    [ 0  0  0  0  0]]
  20. [[ 0  0  0  0  0]
  21.    [ 0 13 14 15  0]
  22.    [ 0 16 17 18  0]
  23.    [ 0  0  0  0  0]]
  24. [[ 0  0  0  0  0]
  25.    [ 0 19 20 21  0]
  26.    [ 0 22 23 24  0]
  27.    [ 0  0  0  0  0]]]]
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/750825
推荐阅读
相关标签
  

闽ICP备14008679号