You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于model.trainable_variables及VGG19微调后其长度为4的疑问

问题背景

我拥有VGG19模型并想要进行微调,执行以下操作:

# fine tuning the vgg19 model

# let's take a look to see how many layers are in the base model
print("Number of layers in the base model: ", len(vgg_model.layers))

# fine-tune from this layer onwards
fine_tune_at = 100

# freeze all the layers before the `fine_tune_at` layer
for layer in vgg_model.layers[:fine_tune_at]:
  layer.trainable = False

输出显示基础模型层数为22。查看模型汇总:

Total params: 20,090,177
Trainable params: 65,793
Non-trainable params: 20,024,384

编译模型:

# compiling the model
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])

执行len(model.trainable_variables)得到结果4。我想了解什么是model.trainable_variables,以及为何此处结果为4?


解答

什么是model.trainable_variables

model.trainable_variables是TensorFlow/Keras模型中,所有可被优化器更新的参数对应的变量集合。只要层的trainable属性设为True,该层内的参数就会被纳入这个集合,训练时会通过反向传播计算梯度并调整这些参数的数值。

为什么此处结果为4

结合你的操作和模型结构分析:

  1. 你设置的fine_tune_at = 100,但VGG19基础模型仅有22层,因此vgg_model.layers[:100]会将VGG19的所有层都冻结(trainable=False),这部分参数不会出现在trainable_variables中。
  2. 从模型参数汇总的可训练参数(65793)来看,你应该在VGG19基础上新增了两个全连接层用于二分类任务:
    • 第一个Dense层(通常设为128维度):包含权重矩阵和偏置向量两个可训练变量,参数总数为512×128 + 128 = 65664
    • 第二个Dense层(维度1,对应二分类输出):包含权重向量和偏置值两个可训练变量,参数总数为128×1 + 1 = 129
    • 两者参数总和65664+129=65793,与你给出的可训练参数数完全匹配。
  3. 这两个Dense层每层贡献2个可训练变量,加起来共4个,因此len(model.trainable_variables)的结果为4。

内容的提问来源于stack exchange,提问作者Roseanne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:35:24