【问题标题】:How does the Flatten() Layer work in Tensorflow?TensorFlow 中的 Flatten() 层如何工作?
【发布时间】:2021-04-11 00:58:47
【问题描述】:

我目前正在研究 tensorflow 和神经网络,而且我对这个主题还很陌生。

我有一堆 4 张图像以 (4,160,120,1) 的形状传递给我的 conv 网络,因为图像是灰度的。

通过神经网络传递我的图像后,我想将图像展平成一个长数组,然后传递给密集层。

但是在我的神经网络的输出上使用 Flatten() 之后,我得到了一个形状为 (4, 2240) 的二维数组,而不是一个长的一维数组。

为什么会这样?我需要做什么才能将其展平为一维数组?再次使用 Flatten() 吗?

我之所以问是因为我的目标是将扁平化的输入与另一个一维输入连接起来,但我得到一个连接不起作用的数组,因为它们的形状不同

感谢您的帮助!

【问题讨论】:

  • 您有一叠 4 张 160x120x1 的图像,并且您想将它们展平成一个一维数组?如果不是全部,您将失去 4 张图像之间的大部分空间关系。
  • 好的。但我需要将另一个数组连接到我的卷积层的输出。我需要将我的 (10,) 数组转换为 (4,10) 数组来添加这个额外的输入吗?
  • 你的目标是什么?我的猜测是,由于您正在堆叠图像,因此您对它们之间的空间关系感兴趣。如果你是,3D conv 网络可能对你更有用。如果您正在连接其他输入并且不想丢失该信息,则您也必须在 4 秒内将其他输入堆叠在一起,并按该顺序使用相同的图像。
  • 我的目标是实施强化学习,让机器人使用环境的深度灰度图像在环境中导航。输入是一个 4 图像堆栈,在将图像通过卷积网络后,我想连接有关目标的信息。比如到目标的距离和角度。然后将连接的信息传递给密集层,然后输出我的 Q 值
  • 然后你想将正确的距离和角度传递给每个图像堆栈,你必须将扁平张量与 (4,10) 张量连接起来。我不确定稍后将其展平是否有帮助,因为展平 4 堆栈图像后的密集层很可能不会为您提供有关周围环境的任何其他信息。我建议在网络中单独处理每个图像,然后传递然后连接信息以为每个图像创建一个 1D 特征数组。然后在 LightGBM 等 ML 系统中使用它来尝试获取更多信息。

标签: python arrays tensorflow keras conv-neural-network


【解决方案1】:

Keras 层不影响批量维度。在将数据输入模型之前,您必须使用 tf.reshape()

input1 = tf.reshape(input1, (-1,))
output = model(input1, input2) # exclude Flatten layer from your model

【讨论】:

  • 所以我需要在将其展平到 (4,2240) 之后并在连接另一个数组之前进行整形?
  • @Ronnee 你必须在喂给 NN 之前重塑 - 请参阅编辑
猜你喜欢
  • 2017-10-25
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 2018-07-26
  • 2021-05-16
  • 2020-05-04
相关资源
最近更新 更多