在Keras中训练两个相同的RNN但输出不同

时间:2019-09-03 09:16:30

标签: python machine-learning keras

我正在训练以解决一个问题,该问题是我使用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是否有可能。

感谢阅读。

0 个答案:

没有答案