如何在 Keras 中训练网络以适应不同的输出大小

mil*_*lez 6 python regression keras tensorflow

我有用 Keras 创建的基本神经网络。我使用数据向量和相应的输出数据(具有两个元素的向量)成功训练网络。它代表一个坐标(x,y)。所以输入一个数组,输出一个数组。

问题是我无法使用单个输入向量应对应于许多坐标的训练数据。实际上,我希望将坐标向量作为输出,而无需事先了解坐标数量。

网络是由

model = Sequential()
model.add(Dense(20, input_shape=(196608,)))
model.add(Dense(10))
model.add(Dense(2))
Run Code Online (Sandbox Code Playgroud)

模型摘要显示每层的输出维度

_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
dense_1 (Dense)              (None, 20)                3932180
_________________________________________________________________
dense_2 (Dense)              (None, 10)                210
_________________________________________________________________
dense_3 (Dense)              (None, 2)                 22
=================================================================
Run Code Online (Sandbox Code Playgroud)

我意识到网络结构只允许长度为 2 的向量作为输出。密集层也不接受None其尺寸。如何修改网络,以便它可以训练并输出向量向量(坐标列表)?

Mat*_*t S 3

rnn 不是您想要预测坐标的东西。相反,我建议使用预测坐标和相关置信度的模型。因此,对于模型的每次前向传递,您都会有 100 个坐标预测。这些预测中的每一个都会有另一个相关的预测来确定它是否正确。只有高于特定置信度阈值的预测才有效。该置信度阈值允许模型选择每次要使用多少个点(最大数量由输出数量设置,在本例中为 100)。

r-cnn 就是一个可以做到这一点的模型。这是我在 github https://github.com/yhenon/keras-frcnn上找到的第一个 keras 实现。