当前位置: 首页 > 知识库问答 >
问题:

使用“通道优先”和“通道最后”实验展平层,得出奇怪的结果

桂丰
2023-03-14

我正在编写一段代码,使用cudnn编写的库在c中运行TensorFlow模型。但它在平坦层上给了我奇怪的结果。在我的模型中,我指定在每个层上首先使用通道。所以,假设前一个maxpool层的输出是形状批次、通道、高宽度,它将被输入到平坦层。我在这里指定我在展平层中也首先使用通道。但将图层展平后,会得到相反方向的结果(最后是通道)。

e、 g.参见以下输入

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)

我认为输出应该是0,1,2,3。。。不是上面的那个。我只能在展平层中使用channels\u last来获得所需的输出,但这对我来说没有意义。

共有1个答案

爱亮
2023-03-14

为什么会有什么不同?平坦层的输出不必排序。它失去4D形状后就不再“有意义”,失去了可以通过卷积层提取的空间意义。在那之后,无论在哪里都不重要。

 类似资料:
  • 我遇到了围棋频道的奇怪行为。问题描述如下。 当我运行上面的代码时,我得到如下结果: 频道ch的len和cap看起来很复杂,但代码仍然有效。当我运行此代码时: 结果是:len:0 cap:0是nil:false致命错误:所有goroutine都处于Hibernate状态-死锁! 更重要的是,当我更改第二个代码块时,如下所示:package main 事情又起了作用,我得到了: 那么,谁能告诉我以下问

  • 前面两节里我们用到的输入和输出都是二维数组,但真实数据的维度经常更高。例如,彩色图像在高和宽2个维度外还有RGB(红、绿、蓝)3个颜色通道。假设彩色图像的高和宽分别是$h$和$w$(像素),那么它可以表示为一个$3\times h\times w$的多维数组。我们将大小为3的这一维称为通道(channel)维。本节我们将介绍含多个输入通道或多个输出通道的卷积核。 多输入通道 当输入数据含多个通道时

  • 问题内容: 我编写了一个迷宫求解程序,该程序应该支持DFS,BFS,A *,Dijkstra和贪婪算法。无论如何,我选择了PriorityQueue作为我的边界数据结构,因为我认为优先级的行为就像队列,堆栈或优先级队列一样,取决于比较器的实现。 这是我实现比较器以将优先级队列转换为队列的方式: / 由于优先级队列的“自然排序”元素最少,并且常规比较器在第一个小于第二个时返回-1,因此被黑的比较器始

  • 问题内容: 我正在玩Golang,我创建了这个小应用程序,使用goroutines进行了多个并发的api调用。 当应用程序运行时,调用完成后,该应用程序将卡住,这是有道理的,因为由于通道未关闭,无法退出 范围c 循环。 我不确定在哪种情况下可以更好地关闭该通道。 问题答案: 当没有更多值要发送时,您将关闭通道,因此在这种情况下,所有goroutine已完成。 (请注意,from 仅将反映连接和协议

  • 我正在尝试使用Django通道与浏览器建立websocket连接。websocket无法与服务器连接: 我使用命令运行服务器。 编辑:降级到16.2.0版。无济于事。

  • 我有一个flatter插件,它使用平台频道做一些本地工作。 如何为需要此插件的应用程序正确编写测试? 单元测试只适用于纯省道功能。我不相信Widget测试能够测试使用平台通道到本机的东西。所以剩下的就是集成测试了。 据我所知,集成测试将启动您的主应用程序,您可以围绕您的应用程序控制它并测试东西。 在我的例子中,我只想测试使用插件的代码(该插件使用平台通道来处理本机内容)。 同样重要的是从平台渠道返