Keras 使用顺序层添加数据
Keras add data with Sequential layers
我在 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
和
def discriminator_model():
model = Sequential()
model.add(LSTM(512, return_sequences=False, input_shape=(4, 100*100)))
model.add(Dense(100*100))
model.add(Dense(1))
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 中执行此操作,以便可以将鉴别器添加到生成器中?有没有办法在 model.add
函数中添加数据?我在 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
为了使其正常工作,您应该更改 generator
代码的这一行:
model.add(Reshape((1, 100 * 100), input_shape=(100*100,)))
我在 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
和
def discriminator_model():
model = Sequential()
model.add(LSTM(512, return_sequences=False, input_shape=(4, 100*100)))
model.add(Dense(100*100))
model.add(Dense(1))
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 中执行此操作,以便可以将鉴别器添加到生成器中?有没有办法在 model.add
函数中添加数据?我在 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
为了使其正常工作,您应该更改 generator
代码的这一行:
model.add(Reshape((1, 100 * 100), input_shape=(100*100,)))