tensorflow 训练时内存溢出问题

我最近在尝试写FCN时,用了两层5*5的卷积和两层5*5的反卷积,训练数据是2000张图片,每次循环输入一张图片,输出一个数字表示本次循环结束,发现程序越跑越慢,原因是内存持续增大了。网上搜了一下发现,没几个是对的,于是只能自己填坑(有个sess.graph.finalize()的,没用)。

于是debug,发现每次循环输入图片后,每张图片前向传播产生的中间map都会保存下来,不会被清理掉(就是说每张图片输入网络后,产生的pool2,relu2等等都会留下),所以,可能是输入网络的方式有问题,考虑使用占位符。

1.原来的代码(for循环内)

input_img= matplotlib.image.imread(img)
input_img=np.reshape(input_img, (1, 256, 256, 3))
input_img=tf.image.convert_image_dtype(input_img, tf.float32)
input_img=sess.run(input1,feed_dict={input1:input_img})
output2= FCN_test.inference(input_img, 0, regularizer)
       这样直接输入网络是不行的

2.修改后的代码

   for 循环外

   

input = tf.placeholder(tf.float32, [1, 256, 256, 3], name='gg')
input1 = tf.image.convert_image_dtype(input, tf.float32)
output2= FCN_test.inference(input1, 0, regularizer)
tensor_ground = tf.placeholder(tf.float32, [65536], name='gg2')
for 循环内
    
        input_img= matplotlib.image.imread(img)
        input_img=np.reshape(input_img, (1, 256, 256, 3))

        out=sess.run(output2,feed_dict={input:input_img})
个人理解,这样通过sess使用占位符,每次输入新的图片后占用的是同样的空间,因此内存不会增加。


你可能感兴趣的:(tensorflow)