我正在尝试为序列训练 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层?如果是这样,我该如何解决?