我最近开始使用张量流,只是尝试了一些模拟数据的线性回归模型。我有以下代码,我正在使用w
训练两个变量b
和GradientDescentOptimizer
(我使用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)
答案 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')