我在Tensorflow后端使用Keras。问题是在培训过程中,我的cpu的只有一个核心被积极使用。我通过以下方式声明我的模型:
class GAN():
def __init__(self):
with k.backend.name_scope("Discriminator"):
self.discriminator = build_discriminator(input_shape,
discriminanator_units)
self.discriminator.compile(optimizer=k.optimizers.Adam(0.0005),
loss=k.losses.binary_crossentropy,
metrics=[k.metrics.binary_accuracy])
with k.backend.name_scope("Generator"):
discriminator_frozen = k.Model(self.discriminator.inputs,
self.discriminator.outputs,
name="Disc_frozen")
discriminator_frozen.trainable = False
... # declare input placeholders
self.generator = build_generator(input_shape, generator_units)
self.prediction = self.generator(inputs=input_list)
... # some Lambda layers
evaluation = discriminator_frozen(self.positions_pelvis_relative)
self.combined = k.Model(inputs=[*input_list,
self.mask,
self.adjacency],
outputs=[evaluation])
self.combined.compile(optimizer=k.optimizers.Adam(0.0015),
loss=self.gan_loss,
metrics=[self.displacement_loss,
self.discriminator_loss,
self.adjacency_loss])
当我预训练self.discriminator
时,所有CPU内核都在使用,但是当我与Generator互换训练时,仅使用1个内核。
答案 0 :(得分:0)
事实证明,在发电机训练阶段存在一个随机采样操作,使整个过程成为瓶颈。在使用完所有CPU内核之后,我创建了一个随机噪声数据集并对其进行了采样。