按照教程on the tensorflow website,我正在一个GAN设置中训练两个网络。我的问题出现在尝试使用不同的训练数据时,以及尝试分批训练时。你知道吗
我感兴趣的数据是13x1浮点数数组,通过将数据复制到生成器的样本输出中,这些浮点数已经转换为(1,13)张量。下面的代码适用于1批数据,但只要我尝试在更大的数据批上进行训练,它就会失败。你知道吗
def make_generator_model():
model = tf.keras.Sequential()
model.add(layers.Dense(128, activation='relu', input_shape=(100,)))
model.add(layers.LeakyReLU())
model.add(layers.Dense(100, activation='relu'))
model.add(layers.Dense(13, activation='relu'))
return model
generator = make_generator_model()
def make_discriminator_model():
model = tf.keras.Sequential()
model.add(layers.Dense(128, activation='relu', input_shape=(13,)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.LeakyReLU())
model.add(layers.Dense(1, activation='sigmoid'))
return model
generator = make_generator_model()
discriminator = make_discriminator_model()
cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True)
def discriminator_loss(real_output, fake_output):
real_loss = cross_entropy(tf.ones_like(real_output), real_output)
fake_loss = cross_entropy(tf.zeros_like(fake_output), fake_output)
return real_loss + fake_loss
def generator_loss(fake_output):
return cross_entropy(tf.ones_like(fake_output), fake_output)
generator_optimizer = tf.keras.optimizers.Adam(1e-4)
discriminator_optimizer = tf.keras.optimizers.Adam(1e-4)
mb_size = 512
@tf.function
def train_step(inp):
noise = tf.random.normal([mb_size, noise_dim])
with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape:
generated_names = generator(noise, training=True)
print(generated_names)
real_output = discriminator(inp, training=True)
fake_output = discriminator(generated_names, training=True)
gen_loss = generator_loss(fake_output)
disc_loss = discriminator_loss(real_output, fake_output)
gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables)
gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables)
generator_optimizer.apply_gradients(zip(gradients_of_generator, generator.trainable_variables))
discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables))
此函数在mb_size=1
时起作用,但当我将其提高时(例如,如上所述,提高到512),就会出现以下错误:
Traceback (most recent call last):
File "gan.py", line 137, in <module>
train(data, epochs)
File "gan.py", line 123, in train
train_step(mb)
File "/home/drv/.local/lib/python2.7/site-packages/tensorflow/python/eager/def_function.py", line 414, in __call__
self._initialize(args, kwds, add_initializers_to=initializer_map)
File "/home/drv/.local/lib/python2.7/site-packages/tensorflow/python/eager/def_function.py", line 357, in _initialize
*args, **kwds))
File "/home/drv/.local/lib/python2.7/site-packages/tensorflow/python/eager/function.py", line 1349, in _get_concrete_function_internal_garbage_collected
graph_function, _, _ = self._maybe_define_function(args, kwargs)
File "/home/drv/.local/lib/python2.7/site-packages/tensorflow/python/eager/function.py", line 1652, in _maybe_define_function
graph_function = self._create_graph_function(args, kwargs)
File "/home/drv/.local/lib/python2.7/site-packages/tensorflow/python/eager/function.py", line 1545, in _create_graph_function
capture_by_value=self._capture_by_value),
File "/home/drv/.local/lib/python2.7/site-packages/tensorflow/python/framework/func_graph.py", line 715, in func_graph_from_py_func
func_outputs = python_func(*func_args, **func_kwargs)
File "/home/drv/.local/lib/python2.7/site-packages/tensorflow/python/eager/def_function.py", line 307, in wrapped_fn
return weak_wrapped_fn().__wrapped__(*args, **kwds)
File "/home/drv/.local/lib/python2.7/site-packages/tensorflow/python/framework/func_graph.py", line 705, in wrapper
raise e.ag_error_metadata.to_exception(type(e))
ValueError: in converted code:
gan.py:109 train_step *
real_output = discriminator(inp, training=True)
/home/drv/.local/lib/python2.7/site-packages/tensorflow/python/keras/engine/base_layer.py:586 __call__
self.name)
/home/drv/.local/lib/python2.7/site-packages/tensorflow/python/keras/engine/input_spec.py:101 assert_input_compatibility
' input tensors. Inputs received: ' + str(inputs))
ValueError: Layer sequential_1 expects 1 inputs, but it received 512 input tensors. Inputs received: [<tf.Tensor 'inp:0' shape=(1, 13) dtype=float32>, ..., <tf.Tensor 'inp_511:0' shape=(1, 13) dtype=float32>]
我相信问题出在我将用于图像数组的代码转换成13x1数组的过程中,但我不知道代码应该在哪里不同。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐