写之前吐个槽,我又把tf.nn.softmax_cross_entropy_with_logits
的参数赋反了,折腾了一晚上。。。这篇文章主要讨论TensorFlow中训练指定变量的问题。这篇博客给了个非常巧妙的方法,简单记录一下。
1. 查看可训练的参数及其index
在tf.trainiable_variables
里存储了可以用于训练的变量,利用如下方法可以打印出它们的信息,
1 2 3 4 5 6 7
| variables_names = [v.name for v in tf.trainable_variables()] values = sess.run(variables_names) i = 0 for k, v in zip(variables_names, values): print(i, "Variable: ", k) print("Shape: ", v.shape) i += 1
|
2. 建立train options,并为其提供不同的trainable lists
假设有两个loss function,分别对应网络中不同区域的变量,为了实现梯度的有效传递,可以利用如下方法,
1 2 3 4 5 6
| loss1 = ... loss2 = ... var_list1 = tf.trainable_variables()[0:10] var_list2 = tf.trainable_variables()[10:] train_op1 = tf.train.AdamOptimizer(learning_rate).minimize(loss1, var_list=var_list1) train_op2 = tf.train.AdamOptimizer(learning_rate).minimize(lose2, var_list=var_list2)
|
reference
[1] [tensorflow] 在不同层上设置不同的学习率,fine-tuning