我正在尝试为我拥有的数据集微调tensorflow/slim resnet-v2-50模型中的最后几层。
我正在努力寻找可以训练的层的名称。在张量流模型中,有没有办法找到可训练的层的名称?有没有办法让这些名称有序,以便我可以选择最后几层进行训练?有没有办法从张量板上获取这些信息?
我正在尝试为我拥有的数据集微调tensorflow/slim resnet-v2-50模型中的最后几层。
我正在努力寻找可以训练的层的名称。在张量流模型中,有没有办法找到可训练的层的名称?有没有办法让这些名称有序,以便我可以选择最后几层进行训练?有没有办法从张量板上获取这些信息?
只需键入
print(tf.trainable_variables())
这将打印所有可训练的变量。
当您只想训练或优化预训练网络的某些层时,这就是您需要知道的。
TensorFlow 的minimize
方法采用一个可选参数var_list
,即要通过反向传播调整的变量列表。
如果不指定var_list
,则图中的任何 TF 变量都可以由优化器进行调整。当您在 中指定一些变量时var_list
,TF 将所有其他变量保持不变。
这是jonbruner和他的合作者使用的脚本示例。
tvars = tf.trainable_variables()
g_vars = [var for var in tvars if 'g_' in var.name]
g_trainer = tf.train.AdamOptimizer(0.0001).minimize(g_loss, var_list=g_vars)
这会找到他们之前定义的所有变量名中包含“g_”的变量,将它们放入列表中,然后在它们上运行 ADAM 优化器。
您可以在Quora上找到相关答案