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

Clo*_*ave 9 python tensorflow

我最近开始使用tensorflow,并尝试了一些模拟数据的线性回归模型.我有以下代码,我正在训练两个变量wb(我使用numpy随机初始化)使用 GradientDescentOptimizer.模型完成训练后,我想查看这些变量,看看它们与实际值的接近程度.(我已经省略了代码的其他部分,因为它们与问题无关).因此,当会话退出时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)
Run Code Online (Sandbox Code Playgroud)

And*_*nko 9

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

一般来说有两种方法:

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

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

saver = tf.train.Saver() 
saver.save(sess, 'filename.chkp')
Run Code Online (Sandbox Code Playgroud)

然后你就可以访问模型了:

sess = tf.Session()
saver = tf.train.Saver()
saver.restore(sess, 'filename.chkp')
Run Code Online (Sandbox Code Playgroud)