【发布时间】:2017-05-15 09:32:20
【问题描述】:
我正在尝试重新训练 inception-resnet-v2 的最后一层。这是我想出的:
- 获取最后一层的变量名称
- 创建一个
train_op以最小化这些变量 wrt 损失 - 恢复除最后一层外的整个图形,同时仅随机初始化最后一层。
我实现如下:
with slim.arg_scope(arg_scope):
logits = model(images_ph, is_training=True, reuse=None)
loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels_ph))
accuracy = tf.contrib.metrics.accuracy(tf.argmax(logits, 1), labels_ph)
train_list = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, 'InceptionResnetV2/Logits')
optimizer = tf.train.AdamOptimizer(learning_rate=FLAGS.learning_rate)
train_op = optimizer.minimize(loss, var_list=train_list)
# restore all variables whose names doesn't contain 'logits'
restore_list = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope='^((?!Logits).)*$')
saver = tf.train.Saver(restore_list, write_version=tf.train.SaverDef.V2)
with tf.Session() as session:
init_op = tf.group(tf.local_variables_initializer(), tf.global_variables_initializer())
session.run(init_op)
saver.restore(session, '../models/inception_resnet_v2_2016_08_30.ckpt')
# followed by code for running train_op
这似乎不起作用(训练损失、错误与初始值相比并没有太大改善)。有没有更好/优雅的方法来做到这一点?如果你也能告诉我这里出了什么问题,那对我来说是很好的学习。
【问题讨论】:
-
我不确定您如何命名变量,但您可以通过
print train_list验证 train_list 是否正确。也许this 可以帮助你,你可能已经看到了。
标签: python tensorflow deep-learning