使用带有时间分布LSTM层的CNN编码器进行拼图解决方案

时间:2018-07-11 08:50:51

标签: python keras deep-learning lstm

我正在尝试建立一个编码器-解码器模型来解决图像的拼图难题。 基本上,我有一张要分成的t * t个相等大小的作物的图像。

我正在使用基于tensorflow的keras API。

我的编码器是经过预训练的CNN模型,其最后一层已删除。因此,对于单个作物,其输出是具有256个特征的特征向量。 现在,我想构建一个LSTM解码器,该解码器应返回图像中t * t作物的预测位置。 这样的想法是,解码器将牢记所有其他作物的位置预测来预测每种作物的位置。

我不确定我是否以我需要的方式使用TimeDistributed和LSTM层... 我问是因为完整的模型不能仅使用CNN部件(及其最后一层)就不能产生任何改进的性能,所以我一定做错了。

我的模特:

input_shape =  [t**2, image_size, image_size, num_channels]
model = Sequential()
# CNN model:
model.add(TimeDistributed(CNN, input_shape=input_shape))
model.add(Bidirectional(LSTM(128, dropout=0.3, recurrent_dropout=0.05, return_sequences=True)))
model.add(Bidirectional(LSTM(128, dropout=0.3, recurrent_dropout=0.05, return_sequences=True)))
model.add(Dense(128, activation='relu'))
model.add(BatchNormalization())
model.add(Dropout(0.3))
model.add(Dense(t**2, activation='softmax'))
output_shape = [t**2, t**2] # t**2 crops, each with a one-hot encoded position

这是做我打算的正确方法吗?

0 个答案:

没有答案