Python Keras使用连续层添加数据

Python Keras使用连续层添加数据,python,neural-network,deep-learning,keras,recurrent-neural-network,Python,Neural Network,Deep Learning,Keras,Recurrent Neural Network,我在Keras中有两个连续模型: def generator_model(): model = Sequential() model.add(LSTM(512, return_sequences=False, input_shape=(3, 100*100))) model.add(Dense(100*100)) model.add(Reshape((1, 100, 100), input_shape=(100*100,))) model.add(Acti

我在Keras中有两个连续模型:

def generator_model():
    model = Sequential()
    model.add(LSTM(512, return_sequences=False, input_shape=(3, 100*100)))
    model.add(Dense(100*100))
    model.add(Reshape((1, 100, 100), input_shape=(100*100,)))
    model.add(Activation('sigmoid'))
    model.compile(optimizer='adadelta', loss='categorical_crossentropy');
    return model

我还有一个将这些模型连接在一起的函数。我正试图训练一个生成性对抗网络,同时使用生成器和鉴别器作为lstm。这就是为什么我需要这个函数

def generator_containing_discriminator(generator, discriminator):
    model = Sequential()
    model.add(generator)
    discriminator.trainable = False
    model.add(discriminator)
    return model
我用它来训练网络

g_loss = discriminator_on_generator.train_on_batch(noise, [1] * BATCH_SIZE)
discriminator.trainable = True
print("batch %d g_loss : %f" % (index, g_loss))
为了使培训的最后一段代码能够工作,生成器和鉴别器应该能够合并在一起。但是,我的生成器的输出不能输入到鉴别器中,因为我需要在将其发送到鉴别器之前向生成器的输出添加一些数据。如何在Keras中执行此操作,以便将鉴别器添加到生成器上?是否有任何方法可以在
模型中添加数据。添加
函数?我在Keras文档中找不到任何内容

请尝试以下操作:

def generator_containing_discriminator(generator, discriminator):
    model = Sequential()
    list_of_dicriminator_inputs = [generator]

    for _ in range(3):
        auxiliary_model = Sequential()
        auxiliary_model.add(Reshape((1, 100*100), input_shape=(100 * 100,)))
        list_of_dicriminator_inputs.append(auxiliary_model)

    extended_generator_output = Merge(list_of_dicriminator_inputs,
                                      mode="concat",
                                      concat_axis=1)
    model.add(extended_generator_output)
    discriminator.trainable = False
    model.add(discriminator)
    return model
为此,您应更改
生成器的此行
代码:

model.add(Reshape((1, 100 * 100), input_shape=(100*100,)))

您的附加数据是什么样子的?我将生成器的输出重新塑造为1x10000矩阵,然后将其与其他3个1x10000矩阵连接起来。然后,我将获得的矩阵和标签(1或0)传递到鉴别器中进行训练。那么您的
重塑
形状设置是否正确?谢谢。你能简要解释一下你的密码吗?我对凯拉斯有点陌生。此外,我应该如何将生成器中的这一行更改为?
Merge
层将获取4个模型的列表,并沿第一个输入轴将它们连接起来,在您的情况下,这是一个“timestep”维度。然后它被输入到您的
鉴别器
模型。我现在应该向发电机上的
g\u损耗=鉴别器输入什么。批量训练(噪音,[1]*批量大小)
?我目前的
噪声
矩阵是
批量大小为4x1000
,出现一个错误,说
模型需要4个输入数组,但只收到一个数组。找到:具有形状(41000)的数组。
您应该提供一个列表,其中包括
[input\u generator,mat1,mat2,mat3]
,其中每个
mat
应该有一个形状
(nb\u of_examples,1100*100)
input\u generator
应该有形状
(nb\u of_examples,3100*100)
。确定。我的生成器将接收输入并生成输出。让这个输出为Y。然后我的鉴别器将以mat1、mat2、mat3和Y作为输入,按该顺序输入到它的LSTM。我说得对吗?
model.add(Reshape((1, 100 * 100), input_shape=(100*100,)))