在训练/ val / test期间,在Tensorflow中保存/恢复模型的“正确”结构是什么?

时间:2017-03-19 09:50:21

标签: python tensorflow

我想在Tensoflow中编写一些代码,可以训练模型,在训练期间运行验证,最后报告测试数据的结果,以获得通过验证数据选择的最佳模型。我想知道以下结构正确的方法吗? [考虑变量范围,参数共享,保存/恢复,..]

MyModel.py

class MyModel(object):

  def build_model(self, reuse):
     with tf.variable_scope("Model", reuse = reuse) as scope:
        self.v1 = tf.get_variable("v1", [1, 2]) 
     // rest of the codes

  def train(self, sess):
    self.build_model(False)
    s1 = tf.train.Saver()
    init_opt =tf.global_variables_initializer()
    sess.run(init_opt)
    // model training
    // ...
    s1.save(sess, "/tmp/model.ckpt")

  def val(self, sess):
    self.build_model(True)
    s2 = tf.train.Saver()
    // do the validation
    s2.save(sess, "/tmp/best_model.ckpt")

  def test(self, sess):
    self.build_model(False)
    s3 = tf.train.Saver()
    s3.restore(sess, "/tmp/model_best.ckpt")
    //rest of the codes ...

我在两个不同的文件中写了以下函数:

train.py:

    with tf.Session() as sess:
        mtrain = MyModel()
        mval = MyModel()

        for iter_i in range(num_training_iters):
           mtrain.train(sess)
           mval.val(sess)

test.py

with tf.Session() as sess:
        mtest = MyModel()
        mtest.test(sess)

我查看了Tensorflow教程,但没有一个有这种结构。 任何帮助都将受到高度赞赏。

由于

1 个答案:

答案 0 :(得分:0)

您可能会觉得这很有用:

https://gist.github.com/earonesty/ac0617a5672ae1a41be1eaf316dd63e4

它允许您保存/恢复全局变量和范围变量:

来自varlib import vartemp

x = 3
y = 4

with vartemp({'x':93,'y':94}):
   print(x)
   print(y)
print(x)
print(y)