2017-06-20 69 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