python - 多次加载 Keras 模型时 GPU 内存泄漏
问题描述
我有一个文件train.py
来训练神经网络模型tensorflow.keras
,最好的模型将best_train.h5
根据train_loss
. 培训时间约为7天。
我有另一个文件test.py
来测试运行期间保存的模型train.py
。在模型中,我每小时test.py
加载一次以查看测试性能。best_train.h5
代码如下:
for i in range(7*24):
time.sleep(1*60*60)
model = tf.keras.models.load_model('best_train.h5')
model.predict(test_data)
我发现每次加载best-train.h5
时,占用的GPU内存都会增加。而在大约 200 次迭代之后,GPU 内存就会耗尽。将发生 OOM 错误。
我知道tf.clear_session()
可以释放 GPU 内存。但是此命令将清除所有会话和图形。我不是我想要的。因为test.py
我还持有其他模型。
解决方案
由于 Keras 在所有模型之间共享全局会话。您可以创建一个新图表并分配一个会话仅用于预测:
self.graph = tf.Graph()
with self.graph.as_default():
self.session = tf.Session(graph=self.graph)
with self.session.as_default():
# Load your model and preform prediction
完成预测后,您的 GPU 内存应立即释放。
推荐阅读
- javascript - User Adjustable Div Width
- spring-security - Azure AD SAML Authentication with Spring Security 5.3.2 (not SAML Extension)
- python - 如何摆脱json文件中的所有'\'
- java - When initialising an object in java, how can I name the object based on a variable passed to the method?
- python - Python 3.7.6 网络爬虫写入 csv 会截断结果
- javascript - JavaScript(在旋转排序数组中查找最小值)
- encryption - 谁将 RSA 私钥给对方
- xcode - 如何防止 Xcode 的重新缩进(Control + i)功能滚动到底部?
- python-3.x - 创建一个只接受特定用户并使任何其他用户无效的问候程序
- r - 在 R 中计算夏普比率时的时间序列相关误差