当前位置:网站首页>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代码块里面调用
边栏推荐
- 【Kaggle项目实战记录】一个图片分类项目的步骤和思路分享——以树叶分类为例(用Pytorch)
- Mysql-连接https域名的Mysql数据源踩的坑
- SQL(1) - Add, delete, modify and search
- Tensorflow2 与 Pytorch 在张量Tensor基础操作方面的对比整理汇总
- 【NFT开发】设计师无技术基础保姆级开发NFT教程在Opensea上全套开发一个NFT项目+构建Web3网站
- 【Reading】Long-term update
- 【Pytorch学习笔记】11.取Dataset的子集、给Dataset打乱顺序的方法(使用Subset、random_split)
- [Over 17] Pytorch rewrites keras
- Detailed explanation of BroadCast Receiver (broadcast)
- day8字典作业
猜你喜欢
Flink Distributed Cache 分布式缓存
Flink 状态与容错 ( state 和 Fault Tolerance)
[After a 12] No record for a whole week
神经网络也能像人类利用外围视觉一样观察图像
面向小白的深度学习代码库,一行代码实现30+中attention机制。
flink项目开发-配置jar依赖,连接器,类库
IDEA 配置连接数据库报错 Server returns invalid timezone. Need to set ‘serverTimezone‘ property.
机器学习(一) —— 机器学习基础
Tensorflow2 与 Pytorch 在张量Tensor基础操作方面的对比整理汇总
【NFT开发】设计师无技术基础保姆级开发NFT教程在Opensea上全套开发一个NFT项目+构建Web3网站
随机推荐
[Let's pass 14] A day in the study room
A deep learning code base for Xiaobai, one line of code implements 30+ attention mechanisms.
门徒Disciples体系:致力于成为“DAO世界”中的集大成者。
数据库期末考试,选择、判断、填空题汇总
华科提出首个用于伪装实例分割的一阶段框架OSFormer
day9-字符串作业
基于Flink CDC实现实时数据采集(二)-Source接口实现
Flink Table API 和 SQL之概述
ECCV2022 | RU & Google propose zero-shot object detection with CLIP!
day6-列表作业
学习总结week3_3迭代器_模块
el-table,el-table-column,selection,获取多选选中的数据
[Database and SQL study notes] 9. (T-SQL language) Define variables, advanced queries, process control (conditions, loops, etc.)
如何停止flink job
【论文精读】ROC和PR曲线的关系(The relationship between Precision-Recall and ROC curves)
【数据库和SQL学习笔记】6.SELECT查询4:嵌套查询、对查询结果进行操作
学习总结week2_1
SharedPreferences和SQlite数据库
解决端口占用问题
【Pytorch学习笔记】10.如何快速创建一个自己的Dataset数据集对象(继承Dataset类并重写对应方法)