簡體   English   中英

使用通道優先和通道最后的實驗來展平層,給出奇怪的結果

[英]Flatten Layer with channel first and channel last experiments giving odd results

我正在編寫代碼以使用 cudnn 編寫的庫在 c++ 中運行 TensorFlow 模型。 但它在展平層上給了我奇怪的結果。 在我的 model 中,我指定我首先在每一層上使用通道。 因此,假設之前 maxpool 層的 output 的形狀是批處理、通道、高度寬度,它將輸入到展平層。 我在這里指定我也在展平層中首先使用通道。 但是展平層會給我相反的結果(最后是通道)。

例如,請參閱以下輸入

inputs = np.arange(75.0).reshape((1,3,5,5))
k = 0;
for n in range(1):
    for h in range(3):
        for w in range(5):
            for c in range(5):
                inputs[n][h][w][c]=k
                k=k+1
print(inputs.shape)
print(inputs)

(1, 3, 5, 5)
[[[[ 0.  1.  2.  3.  4.]
   [ 5.  6.  7.  8.  9.]
   [10. 11. 12. 13. 14.]
   [15. 16. 17. 18. 19.]
   [20. 21. 22. 23. 24.]]

  [[25. 26. 27. 28. 29.]
   [30. 31. 32. 33. 34.]
   [35. 36. 37. 38. 39.]
   [40. 41. 42. 43. 44.]
   [45. 46. 47. 48. 49.]]

  [[50. 51. 52. 53. 54.]
   [55. 56. 57. 58. 59.]
   [60. 61. 62. 63. 64.]
   [65. 66. 67. 68. 69.]
   [70. 71. 72. 73. 74.]]]]


fl = layers.Flatten(data_format='channels_first')
outputs = fl(inputs)
print(outputs.shape)
print(outputs)


(1, 75)
tf.Tensor(
[[ 0. 25. 50.  1. 26. 51.  2. 27. 52.  3. 28. 53.  4. 29. 54.  5. 30. 55.
   6. 31. 56.  7. 32. 57.  8. 33. 58.  9. 34. 59. 10. 35. 60. 11. 36. 61.
  12. 37. 62. 13. 38. 63. 14. 39. 64. 15. 40. 65. 16. 41. 66. 17. 42. 67.
  18. 43. 68. 19. 44. 69. 20. 45. 70. 21. 46. 71. 22. 47. 72. 23. 48. 73.
  24. 49. 74.]], shape=(1, 75), dtype=float32)

我認為 output 應該是 0,1,2,3... 而不是上面那個。 我可以通過僅在展平層中使用 channels_last 來獲得我想要的 output ,但這對我來說沒有意義。

為什么應該有所不同? 扁平化層的output不必訂購。 它在失去 4D 形狀后不再“有意義”,並且失去了可以用卷積層提取的空間意義。 在那之后,它在哪里並不重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM