如何将TensorFlow会话用作类属性

How to use a TensorFlow session as a class attribute

我正在使用会话作为我班级的属性,如

1
self.sess = tf.Session()

要么

1
self.sess = tf.InteractiveSession()

session属性用于几个函数,例如

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

我知道会话必须在某个时候关闭。 将会话用作类的属性时,这是否也适用? 我需要某个地方的"close_session"功能吗? 如果是的话,我应该把它放在课堂上?

遗憾的是,我在课程中找不到任何关于课程属性的内容,所以我很感谢任何建议。


您应该实现一个调用self.sess.close()close()__exit__()成员函数。然后像使用Session一样使用对象:

1
2
with MyClass() as myobj:
    ...

编辑(增加详细程度)

关于python的with语句,它的用处以及如何构建兼容的类,有很多资源。它的用途基本上是整齐地处理对象资源的生命周期。

使用上下文管理器(通常使用with语句处理的对象)作为类的成员函数的一种简洁方法是使该类本身成为上下文管理器。

如果您只是在对象的成员函数中打开Session上下文,则此对象(无论如何)的有效生命周期以with块结束:实际上,此会话对象不是类成员但是只是函数的局部变量。如果要在类的多个成员函数中使用相同的Session,则需要将Session资源的生命周期延长到单个函数之外,并让资源由类创建,方法是让它成为上下文管理器。