当前位置:网站首页>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代码块里面调用
边栏推荐
猜你喜欢

【Pytorch学习笔记】11.取Dataset的子集、给Dataset打乱顺序的方法(使用Subset、random_split)

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

The difference between the operators and logical operators

【论文精读】ROC和PR曲线的关系(The relationship between Precision-Recall and ROC curves)

flink实例开发-batch批处理实例

el-table,el-table-column,selection,获取多选选中的数据

Mysql-连接https域名的Mysql数据源踩的坑

Calling Matlab configuration in pycharm: No module named 'matlab.engine'; 'matlab' is not a package

You should write like this
![[After a 12] No record for a whole week](/img/05/df9aeb04274e308e1341020f836821.jpg)
[After a 12] No record for a whole week
随机推荐
Tensorflow steps on the pit notes and records various errors and solutions
In Opencv, imag=cv2.cvtColor(imag,cv2.COLOR_BGR2GRAY) error: error:!_src.empty() in function 'cv::cvtColor'
JSX基础
js实现数组去重
CVPR 2022 |节省70%的显存,训练速度提高2倍
HQL statement execution process
【Over 15】A week of learning lstm
Map、WeakMap
如何编写一个优雅的Shell脚本(一)
Kubernetes常备技能
Service
Flink 状态与容错 ( state 和 Fault Tolerance)
【Reading】Long-term update
机器学习(一) —— 机器学习基础
ECCV2022 | RU & Google propose zero-shot object detection with CLIP!
Thread handler handle IntentServvice handlerThread
BroadCast Receiver(广播)详解
全尺度表示的上下文非局部对齐
It turns out that the MAE proposed by He Yuming is still a kind of data enhancement
Flutter 3.0升级内容,该如何与小程序结合