ValueError: ни для одной переменной в сети gan не предусмотрены градиенты.Python

Программы на Python
Anonymous
ValueError: ни для одной переменной в сети gan не предусмотрены градиенты.

Сообщение Anonymous »


Я новичок, строю сеть gan, но обнаружил, что в моей сети нет передачи градиента, ниже приведен воспроизводимый код, я не знаю, в чем проблема, может мне помочь?
>
# Модель генератор защиты(): модель = tf.keras.Sequential() model.add(tf.keras.layers.InputLayer(input_shape=(opt.latent_dim,))) model.add(tf.keras.layers.Dense(1024, активация="relu")) model.add(tf.keras.layers.Dense(5024, активация="relu")) model.add(tf.keras.layers.Dense(10 * 10 * 128,activation="relu")) model.add(tf.keras.layers.Reshape([10, 10, 128])) model.add(tf.keras.layers.Conv2DTranspose(128, kernel_size=4, strides=2, padding="SAME",activation="relu")) model.add(tf.keras.layers.BatchNormalization()) model.add(tf.keras.layers.Conv2DTranspose(128, kernel_size=4, strides=4, padding="SAME",activation="relu")) model.add(tf.keras.layers.BatchNormalization()) model.add(tf.keras.layers.Conv2DTranspose(128, kernel_size=4, strides=2, padding="SAME",activation="relu")) model.add(tf.keras.layers.BatchNormalization()) model.add(tf.keras.layers.Conv2DTranspose(3, kernel_size=4, strides=2, padding="SAME",activation="tanh")) возвратная модель Генератор = генератор() Генератор.сводка() дискриминатор защиты(): input_values_dim = Input(shape=(opt.latent_dim,)) x1 = Плотный (единицы = 8, активация = 'relu') (input_values_dim) x1 = Плотность (единиц=4, активация='relu')(x1) mlp = Модель (input_values_dim, x1) #mlp.summary() фильтры = (16, 32, 64) input_images_dim = Input(shape=(opt.img_size*2,opt.img_size*2,opt.channels)) для (i, f) в перечислении (фильтры): если я == 0: x2 = input_images_dim x2 = Conv2D(f, (3, 3), дополнение="то же самое")(x2) x2 = Активация("relu")(x2) x2 = Пакетная нормализация()(x2) x2 = MaxPooling2D(размер_пула=(2, 2))(x2) # выравниваем громкость, затем FC => RELU => BN => DROPOUT x2 = Сгладить()(x2) x2 = Плотный(16)(x2) x2 = Активация("relu")(x2) x2 = Пакетная нормализация()(x2) x2 = Выпадение(0,5)(x2) x2 = Плотный(4)(x2) x2 = Активация("relu")(x2) cnn = Модель (input_images_dim, x2) #cnn.summary() комбинированныйВход = объединить([mlp.output, cnn.output]) x3 = Плотный(4, активация="relu")(combinedInput) x3 = Плотный(1, активация="линейный")(x3) дискриминатор = Модель (входные данные = [mlp.input, cnn.input], выходные данные = x3) возвратный дискриминатор Дискриминатор = дискриминатор() Дискриминатор.summary() Discriminator.trainable = Ложь Моя потеря заключается в следующем:

def Discriminator_loss(real_output, fake_output): real_loss = tf.keras.losses.BinaryCrossentropy(from_logits=True)(tf.ones_like(real_output), real_output) fake_loss = tf.keras.losses.BinaryCrossentropy(from_logits=True)(tf.zeros_like(fake_output), fake_output) общий_убыток = реальный_убыток + фейковый_убыток вернуть тотальный_лосс защита генератор_лосс (fake_output): gen_loss = tf.keras.losses.BinaryCrossentropy(from_logits=True)(tf.ones_like(fake_output), fake_output) вернуть gen_loss оптимизатор = tf.keras.optimizers.Adam(learning_rate=0,00002, beta_1=0,6, beta_2=0,9) Generator.compile(loss="binary_crossentropy", оптимизатор=оптимизатор, метрики=['точность']) Discriminator.compile(loss="binary_crossentropy",оптимизатор=оптимизатор, метрики=['точность']) Но я распечатал следующие результаты и обнаружил, что с градиентом есть некоторые проблемы.

a = tf.random.normal(shape=(2,10)) fake_images = Генератор (a, обучение = True) с tf.GradientTape() как gen_tape: gen_loss = генератор_лосс (фейковый_выход) gradients_of_generator = gen_tape.gradient(gen_loss, Generator.trainable_variables) печать (gradients_of_generator) b = tf.random.normal(shape=(2,320,320,3)) real_output = Дискриминатор ([a,b], обучение = True) fake_output = Дискриминатор([a,fake_images], Training=True) с tf.GradientTape() как disk_tape: disk_loss = Discriminator_loss(real_output, fake_output) gradients_of_discriminator = disk_tape.gradient(disc_loss, Discriminator.trainable_variables) печать (градиенты_дискриминатора) ошибка:
[Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет, Нет] []

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