2017-08-10 75 views
4

我最近開始使用tensorflow,剛剛嘗試了一些模擬數據的線性迴歸模型。我有以下代碼,我正在使用GradientDescentOptimizer來訓練兩個變量wb(我使用numpy隨機初始化)。模型完成培訓後,我想看看這些變量,看看它們與實際值有多接近。 (我忽略了代碼的其他部分,因爲它們與問題無關)。因此,當會話退出with tf.Session()...時,我使用sess = tf.Session()打開默認會話並嘗試使用sess.run(w),但我迎接Attempting to use uninitialized value train_weights。這是預料之中的。所以我想到了使用sess.run(tf.global_variables_initializer()),但只是簡單地將w的值初始化。所以,問題是 - 我怎麼訪問變量的最終值已在tensorflow會話被改變鑑於會議已經關閉Tensorflow:關閉會話後訪問受過訓練的變量

_ = 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) 

回答

3

如果您已經關閉會話後,沒有辦法從中訪問權重。

一般有兩種方法:

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')