当前位置:网站首页>tensorflow的session和内存溢出
tensorflow的session和内存溢出
2022-08-05 05:15:00 【sc0024】
我有一个九十多张图片的成对测试集,要计算输出图片和gt的PSNR和SSIM,这两个的计算tf是有接口的,直接调用就可以,问题是每次跑几张图片就内存溢出,进程被kill掉了,经过一番调研终于解决,来此记录。
TensorFlow的session
首先介绍一下session(会话)。
会话的作用是处理内存分配和优化,使我们能够实际执行由计算图指定的计算。你可以将计算图想象为我们想要执行的计算的「模版」:它列出了所有步骤。为了使用计算图,我们需要启动一个会话,它使我们能够实际地完成任务;例如,遍历模版的所有节点来分配一堆用于存储计算输出的存储器。为了使用 TensorFlow 进行各种计算,你既需要计算图也需要会话。
会话包含一个指向全局图的指针,该指针通过指向所有节点的指针不断更新。这意味着在创建节点之前还是之后创建会话都无所谓。
创建会话对象后,可以使用 sess.run(node) 返回节点的值,并且 TensorFlow 将执行确定该值所需的所有计算。
常用的两种用法:
1、sess = tf.Session()使用完需要显式关闭:
sess.close()
2、with tf.Session() as sess: 自动完成关闭动作
问题分析
之前我以为,每次循环会覆盖掉psnr和ssim两个变量的内容,所以训练集有多大应该不影响内存的占用。但每次跑十几张图片进程就被kill掉,说明在循环的过程中有一些内存没有被释放掉,产生了积累。查了一些资料之后,我找到了tf.reset_default_graph()这个函数。
TensorFlow执行的时候会自动新建很多节点,而重置计算图就可以解决这个问题。
for test_id in test_ids:
with tf.Session() as sess:
img1 = cv2.imread(result_dir + '%12s_out.png' % test_id)
img2 = cv2.imread(result_dir + '%12s_gt.png' % test_id)
psnr = tf.image.psnr(img1, img2, max_val=255)
ssim = tf.image.ssim(tf.convert_to_tensor(img1), tf.convert_to_tensor(img2), max_val=255)
i = i + 1
print(i, test_id, psnr.eval(), ssim.eval())
tf.reset_default_graph()#在每个session执行完重置计算图,注意一定不能在sess代码块里面调用
边栏推荐
- flink实例开发-batch批处理实例
- 【Kaggle项目实战记录】一个图片分类项目的步骤和思路分享——以树叶分类为例(用Pytorch)
- Web Component-处理数据
- el-pagination分页分页设置
- es6迭代协议
- [Database and SQL study notes] 9. (T-SQL language) Define variables, advanced queries, process control (conditions, loops, etc.)
- 解决:Unknown column ‘id‘ in ‘where clause‘ 问题
- 【Pytorch学习笔记】10.如何快速创建一个自己的Dataset数据集对象(继承Dataset类并重写对应方法)
- Service
- 【论文精读】Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation(R-CNN)
猜你喜欢

【数据库和SQL学习笔记】6.SELECT查询4:嵌套查询、对查询结果进行操作

【NFT开发】设计师无技术基础保姆级开发NFT教程在Opensea上全套开发一个NFT项目+构建Web3网站

【Pytorch学习笔记】10.如何快速创建一个自己的Dataset数据集对象(继承Dataset类并重写对应方法)

拿出接口数组对象中的所有name值,取出同一个值

Mesos learning

Flink accumulator Counter 累加器 和 计数器

神经网络也能像人类利用外围视觉一样观察图像

CVPR最佳论文得主清华黄高团队提出首篇动态网络综述

Lecture 3 Gradient Tutorial Gradient Descent and Stochastic Gradient Descent

Flink Table API 和 SQL之概述
随机推荐
Thread handler handle IntentServvice handlerThread
vscode要安装的插件
Tensorflow2 与 Pytorch 在张量Tensor基础操作方面的对比整理汇总
发顶会顶刊论文,你应该这样写作
Flink Distributed Cache 分布式缓存
flink部署操作-flink on yarn集群安装部署
Lecture 3 Gradient Tutorial Gradient Descent and Stochastic Gradient Descent
SharedPreferences和SQlite数据库
It turns out that the MAE proposed by He Yuming is still a kind of data enhancement
SSL 证书签发详细攻略
Flink 状态与容错 ( state 和 Fault Tolerance)
鼠标放上去变成销售效果
day9-字符串作业
【数据库和SQL学习笔记】10.(T-SQL语言)函数、存储过程、触发器
[Pytorch study notes] 9. How to evaluate the classification results of the classifier - using confusion matrix, F1-score, ROC curve, PR curve, etc. (taking Softmax binary classification as an example)
Thread handler句柄 IntentServvice handlerThread
Comparison and summary of Tensorflow2 and Pytorch in terms of basic operations of tensor Tensor
Flink Oracle CDC写入到HDFS
Machine Learning (1) - Machine Learning Fundamentals
MySQL