Проблема с реализацией Generative Adversarial Network (GAN) на Python/keras на MacBookPython

Программы на Python
Ответить
Anonymous
 Проблема с реализацией Generative Adversarial Network (GAN) на Python/keras на MacBook

Сообщение Anonymous »

Я новичок в керасе и генеративно-состязательных сетях (GAN). Когда я попытался запустить этот скрипт для простого GAN на своем MacBook, я получил:

Код: Выделить всё

Traceback (most recent call last):
File "~/Library/CloudStorage/Dropbox/programming/python_image_learning/./248-cifar_GAN.py", line 240, in 
train(generator, discriminator, gan_model, dataset, latent_dim, n_epochs=2)
File "~/Library/CloudStorage/Dropbox/programming/python_image_learning/./248-cifar_GAN.py", line 195, in train
d_loss_real, _ = d_model.train_on_batch(X_real, y_real)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "~/miniconda3/envs/pyimage/lib/python3.12/site-packages/keras/src/backend/tensorflow/trainer.py", line 549, in train_on_batch
logs = self.train_function(data())
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "~/miniconda3/envs/pyimage/lib/python3.12/site-packages/tensorflow/python/util/traceback_utils.py", line 153, in error_handler
raise e.with_traceback(filtered_tb) from None
File "~/miniconda3/envs/pyimage/lib/python3.12/site-packages/keras/src/backend/tensorflow/trainer.py", line 121, in one_step_on_iterator
outputs = self.distribute_strategy.run(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "~/miniconda3/envs/pyimage/lib/python3.12/site-packages/keras/src/backend/tensorflow/trainer.py", line 108, in one_step_on_data
return self.train_step(data)
^^^^^^^^^^^^^^^^^^^^^
File "~/miniconda3/envs/pyimage/lib/python3.12/site-packages/keras/src/backend/tensorflow/trainer.py", line 61, in train_step
self._loss_tracker.update_state(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'update_state'
Я получил ту же ошибку, когда попробовал другие скрипты.
Однако эти скрипты хорошо работали в Google Colab, что заставило меня предположить, что что-то не так с моей локальной средой кодирования:< /p>

Код: Выделить всё

MacBook Pro 16-in, 2019
Bash shell
conda 24.9.2
Python 3.12.7
tensorflow 2.16.2
keras 3.6.0
Тем не менее, я также знаю, что простой CNN или Unet (например, этот) хорошо работает на моем ноутбуке, поэтому проблема, похоже, заключается в соединении между генератором и дискриминатором в этой среде. Я предпринял несколько попыток соединить генератор и дискриминатор, но единственный способ избавиться от этой проблемы — установить входной слой дискриминатора как клон выхода генератора, как показано ниже:

Код: Выделить всё

generator_inputs = Input(shape = (100, ))
G1d1, G1l1, G1n1 = dense_leak_norm(parents = generator_inputs, input_shape = (100, ))
G2d1, G2l1, G2n1 = dense_leak_norm(parents = G1n1, units = 512)
G3d1, G3l1, G3n1 = dense_leak_norm(parents = G2n1, units = 1024)
G4d1 = Dense(np.prod(img_shape), activation = "tanh")(G3n1)
generator_outputs = Reshape(img_shape)(G4d1)
generator = Model(inputs = generator_inputs, outputs = generator_outputs)

# This line is required to evade the error
discriminator_inputs = generator_outputs
# If discriminator_inputs is defined using the line below, same error is reproduced
#discriminator_inputs = Input(shape = img_shape)
D1f1 = Flatten(input_shape = img_shape)(discriminator_inputs)
D1d1, D1l1 = dense_leak_norm(parents = D1f1, units = 512, bool_norm = False)
D2d1, D2l1 = dense_leak_norm(parents = D1l1, units = 256, bool_norm = False)
discriminator_outputs = Dense(units = 1, activation = "sigmoid")(D2l1)
discriminator = Model(inputs = discriminator_inputs, outputs = discriminator_outputs)
discriminator.compile(loss = "binary_crossentropy", optimizer = optimizer, metrics = ["accuracy"])

combined = Model(generator_inputs, discriminator_outputs)
Как мы видим в Discriminator.summary(), InputLayer является клоном выходных данных генератора:

Код: Выделить всё

Layer (type)                         ┃ Output Shape                ┃         Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩
│ keras_tensor_11CLONE (InputLayer)    │ (None, 28, 28, 1)           │               0 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ flatten (Flatten)                    │ (None, 784)                 │               0 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ dense_4 (Dense)                      │ (None, 512)                 │         401,920 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ leaky_re_lu_3 (LeakyReLU)            │ (None, 512)                 │               0 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ dense_5 (Dense)                      │ (None, 256)                 │         131,328 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ leaky_re_lu_4 (LeakyReLU)            │ (None, 256)                 │               0 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ dense_6 (Dense)                      │ (None, 1)                   │             257 │
Но, очевидно, модель GAN не будет обучаться таким образом.
Есть идеи, что происходит?

Подробнее здесь: https://stackoverflow.com/questions/791 ... work-gan-o
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»