Tensorflow 实现释放内存

我在做tensorflow开发的时候遇到如下的错误,我请教了深度学习社区q群中的大神,大神说这是运算图还在内存中,没有及时释放,需要restart一下kernel,但是由于我的代码不能停止执行,所以没办法用重新运行代码来解决释放内存运行图的问题。

问题:

with tf.Session() as sess:

saver = tf.train.Saver() #保存运算图

当我退出with并且立马执行

self.sess = tf.Session()
self.saver = tf.train.import_meta_graph('./Model/model.ckpt.meta')
self.saver.restore(self.sess, tf.train.latest_checkpoint('./Model/'))

的时候由于session和graph没有释放内存的运算图就产生了报错,

解决办法:

在with tf.Session() as sess: 之后同时也要在with的范围以外(注意),添加

tf.reset_default_graph()

代码来重置默认的图,这样就能解决我下一步执行代码

self.sess = tf.Session()
self.saver = tf.train.import_meta_graph('./Model/model.ckpt.meta')
self.saver.restore(self.sess, tf.train.latest_checkpoint('./Model/'))

所产生的问题了。

以上这篇Tensorflow 实现释放内存就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决TensorFlow GPU版出现OOM错误的问题

    问题: 在使用mask_rcnn预测自己的数据集时,会出现下面错误: ResourceExhaustedError: OOM when allocating tensor with shape[1,512,1120,1120] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc [[{{node rpn_model/rpn_conv_shared/convolution}} =

  • Tensorflow 训练自己的数据集将数据直接导入到内存

    制作自己的训练集 下图是我们数据的存放格式,在data目录下有验证集与测试集分别对应iris_test, iris_train 为了向伟大的MNIST致敬,我们采用的数据名称格式和MNIST类似 classification_index.jpg 图像的index都是5的整数倍是因为我们选择测试集的原则是每5个样本,选择一个样本作为测试集,其余的作为训练集和验证集 生成这样数据的过程相对简单,如果有需要python代码的,可以给我发邮件,或者在我的github下载 至此,我们的训练集,测试集,验证

  • TensorFlow内存管理bfc算法实例

    1. 基本介绍 tensorflow设备内存管理模块实现了一个best-fit with coalescing算法(后文简称bfc算法). bfc算法是Doung Lea's malloc(dlmalloc)的一个非常简单的版本. 它具有内存分配.释放.碎片管理等基本功能. 2. bfc基本算法思想 1. 数据结构 整个内存空间由一个按基址升序排列的Chunk双向链表来表示,它们的直接前趋和后继必须在地址连续的内存空间.Chunk结构体里含有实际大小.请求大小.是否被占用.基址.直接前趋.直接后

  • 解决tensorflow训练时内存持续增加并占满的问题

    记录一次小白的tensorflow学习过程,也为有同样困扰的小白留下点经验. 先说我出错和解决的过程.在做风格迁移实验时,使用预加载权重的VGG19网络正向提取中间层结果,结果因为代码不当,在遍历图片提取时内存持续增长,导致提取几十个图片的特征内存就满了. 原因是在对每一张图片正向传播结束后,都会在留下中间信息.具体地说是在我将正向传播的代码与模型的代码分离了,在每次遍历图片时都会正向传播,在tensorflow中新增加了很多的计算节点(如tf.matmul等等),导致内存中遗留了大量的过期信息

  • tensorflow 打印内存中的变量方法

    法一: 循环打印 模板 for (x, y) in zip(tf.global_variables(), sess.run(tf.global_variables())): print '\n', x, y 实例 # coding=utf-8 import tensorflow as tf def func(in_put, layer_name, is_training=True): with tf.variable_scope(layer_name, reuse=tf.AUTO_REUSE):

  • Tensorflow 实现释放内存

    我在做tensorflow开发的时候遇到如下的错误,我请教了深度学习社区q群中的大神,大神说这是运算图还在内存中,没有及时释放,需要restart一下kernel,但是由于我的代码不能停止执行,所以没办法用重新运行代码来解决释放内存运行图的问题. 问题: with tf.Session() as sess: saver = tf.train.Saver() #保存运算图 当我退出with并且立马执行 self.sess = tf.Session() self.saver = tf.train.i

  • Javascript 不能释放内存.

    有Javascript没有提供对内存的使用绝对控制.所以不能使用javascript释放内存. 我遇到这样的情况,建立一个数组,我们没有办法删除这个数组,让数据重新建立.Javascript只提供了Delete方法来清空变量为空. 例如: Var OA=new Array("Hello","Good","Yes") Delete OA[1] 这样的就只把 OA[1]的值设置为空值而已.就是 OA[1] 结果为 undefined.

  • 解析PHP中的内存管理,PHP动态分配和释放内存

    摘要 内存管理对于长期运行的程序,例如服务器守护程序,是相当重要的影响:因此,理解PHP是如何分配与释放内存的对于创建这类程序极为重要.本文将重点探讨PHP的内存管理问题. 一. 内存在PHP中,填充一个字符串变量相当简单,这只需要一个语句"<?php $str = 'hello world '; ?>"即可,并且该字符串能够被自由地修改.拷贝和移动.而在C语言中,尽管你能够编写例如"char *str = "hello world ";&qu

  • 解析PHP中的unset究竟会不会释放内存

    首先让我们看一个例子 复制代码 代码如下: var_dump(memory_get_usage());    $a = "laruence";    var_dump(memory_get_usage());    unset($a);    var_dump(memory_get_usage()); 输出(在我的个人电脑上, 可能会因为系统,PHP版本,载入的扩展不同而不同):    int(90440)    int(90640)    int(90472 注意到 90472-90

  • C/C++动态分配与释放内存的区别详细解析

    1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配.原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块.如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL.当内存不再使用时,应使用free()函数将内存块释放. 1.2 void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空间,返

  • Shell实现强制释放内存脚本分享

    公司服务器最近两天老是因为内存被使用满而造成死机,实在是受不了老叫机房的人去帮忙重启,专门写了个脚本来释放下内存,当然这台服务器不是太重要,我粗鲁的处理方式估计不会适合大多数服务器,请大家使用之前先考虑清楚,不然造成数据丢失就不关我的事了. 脚本内容: cat check-mem.sh 复制代码 代码如下: #!/bin/bash mem_total=`free -m | awk 'NR==2' | awk '{print $2}'` mem_free=`free -m | awk 'NR==3

  • php中用unset销毁变量并释放内存

    PHP的unset()函数用来清除.销毁变量,不用的变量,我们可以用unset()将它销毁.但是某些时候,用unset()却无法达到销毁变量占用的内存! 我们先看一个例子: <?php $s = str_repeat('1',255); //产生由255个1组成的字符串 $m = memory_get_usage(); //获取当前占用内存 unset($s); $mm = memory_get_usage(); //unset()后再查看当前占用内存 echo $m-$mm; ?> 最后输出

  • 关于C#调用C++dll传指针释放内存问题

    一.传入dll前,在C#中申请内存空间 c#里面的指针即 IntPtr 申请如下: IntPtr SrcImgData = Marshal.AllocHGlobal(length); 这种需要提前知道空间大小,否则无法确定空间大小,会导致dll内部处理时越界报错. c#里面申请空间了,那么c++里面一般就是在这些空间里面操作了,一般不会重新分配内存,那么就不需要加引用了. c++: uchar* SrcImg c#导入dll函数时申明: IntPtr SrcImg 那么内存释放自然也是由c#来进

  • C#如何快速释放内存的大数组详解

    前言 本文告诉大家如何使用 Marshal 做出可以快速释放内存的大数组.最近在做 3D ,需要不断申请一段大内存数组,然后就释放他,但是 C# 对于大内存不是立刻释放,所以就存在一定的性能问题.在博客园看到了一位大神使用 Marshal 做出快速申请的大数组,于是我就学他的方法来弄一个.本文告诉大家这个类是如何使用. 在使用的时候,先来看下原来的 C# 的大数组性能.可以看到在不停gc,性能不好 static void Main(string[] args) { for (int i = 0;

随机推荐