当前位置:网站首页>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代码块里面调用
边栏推荐
- 转正菜鸟前进中的经验(废话)之谈 持续更新中... ...
- SparkML-初探-文本分类
- RecycleView和ViewPager2
- 【After a while 6】Machine vision video 【After a while 2 was squeezed out】
- es6迭代协议
- IDEA 配置连接数据库报错 Server returns invalid timezone. Need to set ‘serverTimezone‘ property.
- Mysql-连接https域名的Mysql数据源踩的坑
- You should write like this
- Pandas(五)—— 分类数据、读取数据库
- MySql之索引
猜你喜欢
服务网格istio 1.12.x安装
Day1:用原生JS把你的设备变成一台架子鼓!
2022年中总结关键词:裁员、年终奖、晋升、涨薪、疫情
My 的第一篇博客!!!
Tensorflow踩坑笔记,记录各种报错和解决方法
MSRA proposes extreme masking model ExtreMA for learning instances and distributed visual representations
SQL(1) - Add, delete, modify and search
[Practice 1] Diabetes Genetic Risk Detection Challenge [IFLYTEK Open Platform]
华科提出首个用于伪装实例分割的一阶段框架OSFormer
IDEA 配置连接数据库报错 Server returns invalid timezone. Need to set ‘serverTimezone‘ property.
随机推荐
初识机器学习
Tensorflow踩坑笔记,记录各种报错和解决方法
A deep learning code base for Xiaobai, one line of code implements 30+ attention mechanisms.
对数据排序
Thread handler handle IntentServvice handlerThread
如何停止flink job
Comparison and summary of Tensorflow2 and Pytorch in terms of basic operations of tensor Tensor
[Database and SQL study notes] 9. (T-SQL language) Define variables, advanced queries, process control (conditions, loops, etc.)
【Pytorch学习笔记】10.如何快速创建一个自己的Dataset数据集对象(继承Dataset类并重写对应方法)
Mysql-连接https域名的Mysql数据源踩的坑
Flink 状态与容错 ( state 和 Fault Tolerance)
拿出接口数组对象中的所有name值,取出同一个值
spark-DataFrame数据插入mysql性能优化
In Opencv, imag=cv2.cvtColor(imag,cv2.COLOR_BGR2GRAY) error: error:!_src.empty() in function 'cv::cvtColor'
My 的第一篇博客!!!
Flink和Spark中文乱码问题
flink中文文档-目录v1.4
基于Flink CDC实现实时数据采集(一)-接口设计
flink部署操作-flink standalone集群安装部署
flink实例开发-batch批处理实例