2017-06-20 85 views
0

我使用一個會話我的類的屬性,如如何使用TensorFlow會話類屬性

self.sess = tf.Session() 

self.sess = tf.InteractiveSession() 

會話屬性在多個功能使用,例如

def get_loss(self, input_data): 
     return self.sess.run(self.loss, {self.data:input_data}) 

我知道會話必須在某個時間點關閉。當將會話用作類的屬性時,這也適用嗎?我需要某個地方的「close_session」功能嗎?如果是的話,我應該把它放在課堂上嗎?

遺憾的是,我無法找到關於會話的任何內容,所以我很感激任何建議。

回答

0

您應該實現一個close()__exit__()成員函數,它調用self.sess.close()。然後使用你的對象,你會用Session做:

with MyClass() as myobj: 
    ... 

編輯(增加冗餘級別)

關於python的with聲明,它的用處以及如何建立兼容的類,有plentyofresourcesout there。它的使用基本上是巧妙地處理對象資源的生命週期。

使用上下文管理器(通常用with語句處理的對象)作爲類的成員函數的一種簡潔方法是將該類本身作爲上下文管理器。

如果只是你的對象,那麼這個對象(其資源的反正)的有效壽命的一個成員函數中打開一個Session上下文中有with塊結束:實際上,這個session對象不是類的成員,但只是該函數的局部變量。如果要在類的多個成員函數中使用相同的Session,則需要將資源的生命週期延長到單個函數之外,並讓資源成爲類的句柄,方法是讓它成爲上下文管理器。

+0

什麼時候應該調用sess.close()函數? – Lemon

+0

當調用MyClass.close()時,會調用Session.close(),如果遵循上面的習慣用法,那麼當'with'作用域關閉時會調用它。總之,不要用手稱呼它們,而是讓示波器處理它。 – user1735003

+0

對不起,但我仍然不確定我是否理解你的意思。當我初始化類的一個實例時,例如instance = MyClass(params),我應該如何將它與scope一起使用?那麼MyClass.close()如何在你的作用域中自動調用?你可能會提供一個鏈接顯示這種結構在實踐中? – Lemon