我想在Tensorflow中部分微调一个预训练的深度神经网络(即,加载所有层的权重,但只更新高级层上的权重)。
Tensorflow中有没有一种方法可以选择应该更改的变量和应该保持不变的变量?
提前感谢!
回答:
当你创建一个优化器(例如 tf.train.AdagradOptimizer
)来训练你的模型时,你可以向 Optimizer.minimize()
方法传递一个明确的 var_list=[...]
参数。(如果你不指定这个列表,它将默认包含 tf.trainable_variables()
中的所有变量。)
例如,根据你的模型,你可以使用变量的名称来定义要优化的变量列表:
# 假设所有要微调的变量名称都以 "layer17/" 开头。
opt_vars = [v for v in tf.trainable_variables() if v.name.startswith("layer17/")]
train_op = optimizer.minimize(loss, var_list=opt_vars)