克服Graphdef在张量流中不能大于2GB - 用tf进行图像变换

时间:2017-10-18 20:56:17

标签: python tensorflow deep-learning

我已经提到了这个问题,但我不太明白 Mr.mrry提供的第二种方法。

overcome Graphdef cannot be larger than 2GB in tensorflow

基本上,我正在尝试在图像上使用tf内置的图像转换方法。我遇到了标题中提供的错误。 另外,我是否需要为每次迭代创建一个新会话? 目前,这个过程有点慢,我不知道如何加快速度。

import tensorflow as tf
import os
from scipy.ndimage import imread
from scipy.misc import imresize, imshow
import matplotlib.pyplot as plt


for fish in Fishes:
    fish_images = os.listdir(os.path.join('C:\\Users\\Moondra\\Desktop\\Fishes', fish))  # get the image files
    os.makedirs(SAVE_DIR + fish, exist_ok = True)
    for num, fish_image in enumerate(fish_images):
        image =imread(os.path.join('C:\\Users\\Moondra\\Desktop\\Fishes', fish, fish_image))
        new_img =tf.image.adjust_brightness(image, .4)  #image transformation
        with tf.Session() as sess:

            new_image =sess.run(new_img)
            imsave(os.path.join(SAVE_DIR, fish, fish +str(num)+'.jpg'), new_image)

1 个答案:

答案 0 :(得分:2)

这不是TF的使用方式。

  1. 您应该创建图表一次
  2. 您应该创建会话一次
  3. 您当前的代码在循环中执行这两项操作,从而导致速度缓慢和内存问题。问题在于TF不是命令式语言,所以

    new_img =tf.image.adjust_brightness(image, .4)  #image transformation
    

    不是在图像上应用函数。这会在图形中创建一个操作,并在new_img中存储对此操作的引用。因此,每次调用此函数时,图表都会增长。

    所以在伪代码中它应该是:

    create placeholder for image name
    create transformed image op - new_img
    create session
    for each image
      call in a session new_img op, providing path to the placehodler using feed_dict