model.trainable_variables return none

model.trainable_variables return none

我想编写我的自定义训练函数,但我无法访问我的 trainable_weights,因为它 returns[]。我可以使用 layer.get_weight() 获取权重,但我的 trainable_variables 是空的。这是我的训练方法:

def train_on_batch(X, y_real,model):
  with tf.GradientTape() as tape:
  tape.watch(X)
  y_pred = model(X, training= True)
  print(model.trainable_variables)
  loss_value = loss(y_real, y_pred)
grads = tape. gradient(loss_value, model.trainable_variables)
optimizer.apply_gradients(zip(grads, model.trainable_variables))
return loss_value

这是我的 CNN 模型的一部分:

model_list = list()
# base model input
in_image = Input(shape=input_shape)
# conv 1x1
d = Conv2D(128, (1,1), padding='same', kernel_initializer=init, kernel_constraint= const)(in_image)
d = LeakyReLU(alpha=0.2)(d)
# conv 3x3 (output block)
d = MinibatchStdev()(d)
d = Conv2D(128, (3,3), padding='same', kernel_initializer=init, kernel_constraint= const)(d)
d = LeakyReLU(alpha=0.2)(d)
# conv 4x4
d = Conv2D(128, (4,4), padding='same', kernel_initializer=init, kernel_constraint= const)(d)
d = LeakyReLU(alpha=0.2)(d)
# dense output layer
d = Flatten()(d)
out_class = Dense(1, name='dense')(d)
print(type(out_class))
# define model
model = Model(in_image, out_class)

在此处输入代码

检查问题的最后一段代码。这段代码给出了获取变量的最佳方式。