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

时间:2017-05-09 11:19:30

标签: python tensorflow regression keras

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

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

网络由

创建
model = Sequential()
model.add(Dense(20, input_shape=(196608,)))
model.add(Dense(10))
model.add(Dense(2))

和模型摘要显示每个图层的输出尺寸

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

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

2 个答案:

答案 0 :(得分:4)

递归神经网络(RNNs)会更合适,这种模型通常被称为seq2seq,即序列到序列。循环网络使用LSTM和GRU等层,可以输入和输出可变长度序列。只需看看使用RNN完成的机器翻译等事情。

这可以直接用keras完成,互联网上有很多例子,例如this一个。

答案 1 :(得分:1)

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

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