我有一个这样的CNN:~/.local/bin/superset
。
同时,我有一个从其他网络获得的预训练模型(ckpt文件),该模型也具有“ layer1”。
我要实现的目标:使用预先训练的ckpt文件仅还原CNN的“ layer1”。然后,我将冻结“ layer1”,并仅在培训期间更新“ layer2”。
但是我不知道如何使用/usr/local/bin
函数来实现这一目标。
我知道如何使用基本的/etc/profile
之类的input-> layer1 -> layer->2->output
和tf.esimator.train_and_evaluate()
例程来实现相同的目的。
如下所示,我可以通过旧方式恢复ckpt:
Tensorflow
但是这次,我需要修改以下代码以还原ckpt:
session.run(), initializer()
我想restore()
希望通过##### After defining network ########
session.run(tf.variables_initializer(uninitialized_variables))
variables_to_restore = slim.get_variables(scope="layer1")
restorer = tf.train.Saver(variables_to_restore)
restorer.restore(session, save_path=checkpoint_path)
session.run(something)
之类的包装例程来简化实现。但这使执行各种更灵活的操作变得更加困难。
任何人都可以提供一些指导,以便在我使用train_input_fn = get_input_fn(is_training=True)
val_input_fn = get_input_fn(is_training=False)
estimator = tf.estimator.Estimator(model_fn, params=model_params, config=run_config)
train_spec = tf.estimator.TrainSpec(train_input_fn, max_steps=input_params['num_steps'])
eval_spec = tf.estimator.EvalSpec(val_input_fn, steps=None, start_delay_secs=1800, throttle_secs=1800)
tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)
时进行修改,使其仅恢复“ layer1”吗?