【问题标题】:variables_to_train flag in Tf-slimTf-slim 中的 variables_to_train 标志
【发布时间】:2018-07-11 12:12:11
【问题描述】:

我正在使用 TF-Slim 从预训练模型微调我的模型。当我使用create_train_op时,我发现它有一个参数是variables_to_train。在一些教程中,它使用如下标志:

   all_trainable = [v for v in tf.trainable_variables()]
   trainable     = [v for v in all_trainable]
   train_op      = slim.learning.create_train_op(
        opt,
        global_step=global_step,
        variables_to_train=trainable,
        summarize_gradients=True)

但在官方的TF-Slim中,并没有使用

   all_trainable = [v for v in tf.trainable_variables()]
   trainable     = [v for v in all_trainable]
   train_op      = slim.learning.create_train_op(
        opt,
        global_step=global_step,            
        summarize_gradients=True)

那么,使用variables_to_train和不使用variables_to_train有什么区别?

【问题讨论】:

    标签: tensorflow deep-learning tf-slim


    【解决方案1】:

    你的两个例子都做同样的事情。您训练图表中出现的所有可训练变量。使用参数variables_to_train,您可以定义在训练期间应该更新哪些变量。

    这种情况的一个用例是当您有预训练的内容(例如不想在模型中训练的词嵌入)时。与

    train_vars = [v for v in tf.trainable_variables() if "embeddings" not in v.name]
    train_op      = slim.learning.create_train_op(
        opt,
        global_step=global_step,
        variables_to_train=train_vars,
        summarize_gradients=True)
    

    您可以从训练中排除名称中包含"embeddings" 的所有变量。如果你只是想训练所有变量,你不必定义train_vars,你可以创建没有参数variables_to_train的训练操作。

    【讨论】:

      猜你喜欢
      • 2017-10-28
      • 2018-07-14
      • 2017-11-06
      • 2017-11-30
      • 2018-04-16
      • 2018-03-04
      • 1970-01-01
      • 2017-02-05
      • 2017-01-22
      相关资源
      最近更新 更多