如何制作N个相同模型的副本并分别训练?

时间:2019-10-07 12:47:32

标签: keras deep-learning

我有一个简单的完全连接模型,如下所示,

import keras.backend as K
from keras.layers import Dense, Activation, Lambda,

def ModelX(m): 

    hidden1 = 8
    hidden2 = 8
    hidden3 = 8

    model_input = layers.Input(shape=(2,))
    hidden_layer1 = Dense(hidden1, activation='relu')(model_input)
    hidden_layer2 = Dense(hidden2, activation='relu')(hidden_layer1)
    hidden_layer3 = Dense(hidden3, activation='relu')(hidden_layer2)
    model_output = Dense(m, activation='linear')(hidden_layer3)
    modelx = Model(inputs=model_input, outputs=model_output)

    return modelX

我有一个长度为(2, N)的输入数据序列。我想拥有一个ModelX的N长度数组,以便输入序列的每个(2,1)切片都是每个模型的输入。最后,这些模型的输出将被串联在一起以形成4N长度序列。

PS:keras.layers.TimeDistributed()不是我所期望的。我想将输入的每个部分输入到同一模型的不同副本中,并分别进行训练。我该如何实现?

这是我到目前为止所做的,

def Model_Array(Config): 
    N = Config.N
    y = layers.Input(shape=(2,N,))


    for i in range(N):
        x_input = Lambda(lambda x: x[:, :, i])(y)

        if i == 0:
           x_output = Modelx(Config.m)(x_input)
        else:
            x_output = layers.concatenate([x_output,
                                           Modelx(Config.m)(x_input)])

    x_output = Lambda(lambda x: x[:, :tf.cast(N, tf.int32)])(x_output)

    output = SomeOtherModel(Config)(x_output)
    output = Lambda(lambda x: K.sigmoid(-x))(output)

    model = Model(y, output)
    return model

但是此模型不能提供预期的性能

0 个答案:

没有答案