张量流中的 GAN 训练问题

时间:2021-08-01 13:57:36

标签: tensorflow keras generative-adversarial-network

我正在尝试为序列训练 GAN,但以下代码抛出错误。

latent_dim  = 100
def generator():
  gen = Sequential([                  
                    Dense(25* 16, input_dim = latent_dim),
                    LeakyReLU(),
                    Dropout(0.2),
                    Reshape((25,16)),
                    Conv1DTranspose(32,3, 2, padding ="same"),
                    BatchNormalization(momentum = 0.7),
                    LeakyReLU(),
                    Dropout(0.2),
                    Conv1DTranspose(64,3, 2, padding ="same"),
                    BatchNormalization(momentum = 0.7),
                    LeakyReLU(),
                    Dropout(0.2),
                    Conv1D(96,3, 2, padding ="same"),
                    BatchNormalization(momentum = 0.7),
                    LeakyReLU(),
                    Dropout(0.2),
                    Dense(22, "softmax"),
                    Lambda(lambda x : tf.argmax(x, axis = -1)),                 
    ])
  print(gen.summary())
  return gen   

def descriminator():
  des = Sequential([
                    InputLayer(input_shape = (max_len, )),                  
                    Embedding(22, 100),
                    Conv1D(32,3, padding ="same"),
                    BatchNormalization(momentum = 0.7),
                    LeakyReLU(),
                    Conv1D(64,3, padding ="same"),
                    BatchNormalization(momentum = 0.7),
                    LeakyReLU(),
                    Conv1D(96,3, padding ="same"),
                    BatchNormalization(momentum = 0.7),
                    LeakyReLU(),
                    Flatten(),
                    Dense(100),
                    BatchNormalization(momentum = 0.7),
                    LeakyReLU(),
                    Dense(1, activation= "sigmoid")
    ]) 
  des.compile(tf.keras.optimizers.Adam(0.0003), "binary_crossentropy")
  print(des.summary())
  return des

def Adverserial(gen , des):
  des.trainable = False
  gan = Sequential()
  gan.add(gen)
  gan.add(des)
  gan.compile(tf.keras.optimizers.Adam(0.0003), "binary_crossentropy")
  return gan 

gen = generator()
des = descriminator() 
gan = Adverserial(gen, des)

错误是:

<块引用>

ValueError: 没有为任何变量提供梯度:['dense_44/kernel:0', 'dense_44/bias:0', 'conv1d_transpose_22/kernel:0', 'conv1d_transpose_22/bias:0', 'batch_normalization_77/gamma: 0', 'batch_normalization_77/beta:0', 'conv1d_transpose_23/kernel:0', 'conv1d_transpose_23/bias:0', 'batch_normalization_78/gamma:0', 'batch_normalization_78/beta:0', 'conv1d_44/kernel: , 'conv1d_44/bias:0', 'batch_normalization_79/gamma:0', 'batch_normalization_79/beta:0', 'dense_45/kernel:0', 'dense_45/bias:0']。

是不是因为Lambda层?如果是这样,我该如何解决?

0 个答案:

没有答案