我正在训练以解决一个问题,该问题是我使用RNN跟踪对象,了解它并生成轨迹。因此,RNN的输入是x,y,speed,...之类的东西,而输出是下一个x,y。到目前为止,一切正常。
现在,我不仅要尝试使用相同的网络来学习与以前相同的网络,而且还要了解对象的形状(目前为止的半径)如何随时间变化。因此,此RNN的输入为x,y,速度,半径,而输出为x,y,半径。这不是很好,我认为是因为它正在尝试学习两个不同的东西。
我的第一个想法是创建两个独立的RNN,一个学习x,y,另一个学习半径,但这会非常低效,因为他们正在学习相同的数据,并且可能两者都拥有相同的架构
我想知道是否存在一种将它们组合到单个模型中的方法,以便以更有效的方式对其进行训练。
def createRNNmodel(network_input):
model = Sequential()
model.add(LSTM(
128//1,
input_shape=(network_input.shape[1], network_input.shape[2]),
return_sequences=True
))
model.add(Dropout(0.5))
model.add(LSTM(128//2, return_sequences=True))
model.add(Dropout(0.5))
model.add(LSTM(128//2, return_sequences=True))
model.add(Dropout(0.5))
model.add(LSTM(128//4, return_sequences=True))
model.add(Dropout(0.5))
model.add(LSTM(128//8, return_sequences=False))
model.add(Dense(128//2))
model.add(Dropout(0.5))
model.add(Dense(128//8))
model.add(Dropout(0.5))
model.add(Dense(3))
model.compile(loss='mean_squared_error', optimizer='rmsprop')
return model
def trainRNNmodel(model, network_input, network_output):
folderpath = "/home/data/RNN_weights/"
filepath = folderpath+"weights-{epoch:03d}-{loss:.4f}.hdf5"
checkpoint = ModelCheckpoint(
filepath, monitor='loss',
verbose=0,
save_weights_only=False,
save_best_only=True,
mode='min',
period=5
)
callbacks_list = [checkpoint]
model.fit(np.array(network_input), np.array(network_output),
validation_split=0.1, epochs=1000, batch_size=256, callbacks=callbacks_list)
return model
这就是我所拥有的那一刻,它是试图了解x,y,radius的RNN(您可以看到输出为3)。我想创建两个相同的网络,唯一的区别是输出层,一个将具有2(x,y),另一个将具有1(半径),并且它们将使用相同的数据进行训练。
我不知道Keras是否有可能。
感谢阅读。