Низкая производительность DCGAN при обновлении с keras до tf.keras

Обновление 1: при удалении слоев пакетной нормализации работает хорошо. Очевидно, способ работы пакетной нормализации был изменен между итерациями. Все еще расследует.

Обновление 2: вопросы ниже сообщают о двух возможных средствах правовой защиты. изменение значения импульса в батнормализации (у меня это не сработало) и просто комментирование батчнорма в дискриминаторе. Комментирование BN в дискриминаторе, кажется, работает для меня. Пока не знаю почему.

Вопросы / ссылки, сообщающие об аналогичных проблемах:

Плохой результат при BatchNormalization

https://datascience.stackexchange.com/questions/56860/dc-gan-with-batch-normalization-not-working

Проблема с частичной моделью поезда Keras (о модели GAN)

https://medium.com/@nagabhushansn95/using-batch-normalization-in-discriminator-is-making-my-dc-gan-model-to-not-work-8c0b4a869a2a


Начало вопроса:

Я пытаюсь запустить DCGAN из GAN в действии. GAN генерирует изображения из набора данных MNIST.

Исходный код можно найти здесь GAN в действии, страница github

Код работает хорошо, и изображения получаются хорошими.

Когда я изменяю исходный код так, чтобы он стал совместимым с tf.keras, а не keras, способность модели DCGAN генерировать изображения становится бесполезной.

Это единственный фрагмент кода, который я изменил. Из:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

from keras.datasets import mnist
from keras.layers import Activation, BatchNormalization, Dense, Dropout, Flatten, Reshape
from keras.layers import LeakyReLU
from keras.layers import Conv2D, Conv2DTranspose
from keras.models import Sequential
from keras.optimizers import Adam

to:

%matplotlib inline

import matplotlib.pyplot as plt
import numpy as np

from tensorflow.keras.datasets import mnist
from tensorflow.keras.layers import Activation, BatchNormalization, Dense, Dropout, Flatten, Reshape
from tensorflow.keras.layers import LeakyReLU
from tensorflow.keras.layers import Conv2D, Conv2DTranspose
from tensorflow.keras.models import Sequential
from tensorflow.keras.optimizers import Adam

Я даже пытался обеспечить совместимость tf_1 с

tf.compat.v1.disable_v2_behavior()

- производительность остается плохой.

Почему это? Я пропустил что-то очевидное?


person RNs_Ghost    schedule 09.11.2020    source источник
comment
Я столкнулся с этим некоторое время назад - если я правильно помню, скорость обучения по умолчанию отличается между tf.keras и keras. Кажется, я больше не могу его найти, но я считаю, что tf.keras имеет значение по умолчанию 1e-3, в то время как keras имеет значение по умолчанию 1. Не уверен на 100%, но стоит проверить.   -  person Stanley Zheng    schedule 09.11.2020
comment
спасибо @StanleyZheng - я не думаю, что вы знаете, для какого оптимизатора это? Я использую адам   -  person RNs_Ghost    schedule 09.11.2020
comment
По умолчанию для каждого оптимизатора - если вы не установите lr, скорость обучения будет другой.   -  person Stanley Zheng    schedule 10.11.2020
comment
@StanleyZheng Batchnormalisation кажется подозрительным, см. Мою правку   -  person RNs_Ghost    schedule 11.11.2020
comment
Хм, это супер интересно, такого раньше не видел. Хорошая работа, чтобы понять это, это займет у меня целую вечность.   -  person Stanley Zheng    schedule 12.11.2020