Tensorflow:关闭会话后访问训练过的变量

时间:2017-08-10 08:53:11

标签: python tensorflow

我最近开始使用张量流,只是尝试了一些模拟数据的线性回归模型。我有以下代码,我正在使用w训练两个变量bGradientDescentOptimizer(我使用numpy随机初始化)。模型完成训练后,我想查看这些变量,看看它们与实际值的接近程度。 (我已经省略了代码的其他部分,因为它们与问题无关)。因此,当会话退出with tf.Session()...时,我会使用sess = tf.Session()打开默认会话并尝试使用sess.run(w),但我会收到Attempting to use uninitialized value train_weights。这是预料之中的。所以我想到了使用sess.run(tf.global_variables_initializer()),但只是简单地将w的值初始化为开头。所以问题是 - 如果变量在一个张量流会话中被改变,如果会话已经关闭,我如何访问该变量的最终值

_ = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(_)
    for epoch in range(n_epochs):
        for batch_pos in range(num_batches):
            x_batch = X[batch_ind[batch_pos]:batch_ind[batch_pos+1]]
            y_batch = Y[batch_ind[batch_pos]:batch_ind[batch_pos+1]]
            sess.run(optimizer, feed_dict = {x_train_batch: x_batch,\
                     y_train_batch: y_batch})
            cost_ = sess.run(cost, feed_dict = {x_train_batch: x_batch,\
                     y_train_batch: y_batch})
        if (epoch)%display_rate == 0:
            print('Epoch:', epoch+1, 'Cost: ', cost_)

sess = tf.Session()
# sess.run(tf.global_variables_initializer())
sess.run(w)

1 个答案:

答案 0 :(得分:9)

如果您已经关闭会话,则无法从中访问权重。

一般来说,有两种方法:

1)不要关闭会话(不要使用带有tf.Session()的构造作为sess);

2)在会话结束时使用保护程序:

saver = tf.train.Saver() 
saver.save(sess, 'filename.chkp')

然后您就可以访问该模型了:

sess = tf.Session()
saver = tf.train.Saver()
saver.restore(sess, 'filename.chkp')