2017-04-27 10 views
1

私はTensorFlowkeras.preprocessing.image.ImageDataGenerator()を使用してトレーニング前にすべてのクラスのサンプルサイズをバランスさせる合成データを生成します。ここで Tensorflow:raise ValueError( "GraphDefは2GBを超えることはできません")tf.imageとkerasを使用してデータを拡大する

Traceback (most recent call last): 
    File "data_augmentation.py", line 100, in <module> 
    run(fish_class_aug_fold[i]) 
    File "data_augmentation.py", line 93, in run 
    data_augmentation(img_handle, fish_class, aug_fold) 
    File "data_augmentation.py", line 52, in data_augmentation 
    img = session.run(img) 
    File "/Users/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 778, in run 
    run_metadata_ptr) 
    File "/Users/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 982, in _run 
feed_dict_string, options, run_metadata) 
    File "/Users/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1032, in _do_run 
    target_list, options, run_metadata) 
    File "/Users/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1039, in _do_call 
    return fn(*args) 
    File "/Users/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1017, in _run_fn 
self._extend_graph() 
    File "/Users/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1061, in _extend_graph 
add_shapes=self._add_shapes) 
    File "/Users/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2154, in _as_graph_def 
    raise ValueError("GraphDef cannot be larger than 2GB.") 
ValueError: GraphDef cannot be larger than 2GB. 

が私のコードです:私は以下のようにエラーメッセージが表示されました

def data_augmentation(img_handle, fish_class, nb_fold): 
""" 
This function is to generate synthetic pics for each class 
parameters: 
img_handle: a path for each input img 
class: name of each class in this problem 
nb_fold: an integer which indicates the number of folds that should run for each class 
for generating the same number of images for each class. 
""" 

img = cv2.imread(img_handle) 
# randomly adjust the hue of the img 
img = tf.image.random_hue(img, max_delta=0.3) 

# randomly adjust the contrust 
img = tf.image.random_contrast(img,lower=0.3, upper=1.0) 

# randomly adjust the brightness 
img = tf.image.random_brightness(img, max_delta=0.2) 

# randomly adjust the saturation 
img = tf.image.random_saturation(img, lower=0.0, upper=2.0) 

with tf.Session() as session: 
    # this output is np.ndarray 
    img = session.run(img) 

datagen = ImageDataGenerator(
    rotation_range=45, 
    width_shift_range=0.2, 
    height_shift_range=0.2, 
    rescale = 1./255, 
    shear_range=0.2, 
    zoom_range=0.2, 
    horizontal_flip=True, 
    fill_mode='nearest') 

x = img.reshape((1,) + img.shape) # this is a Numpy array with shape (1, 3, height, width) 

i = 0 
for batch in datagen.flow(x, batch_size=1, save_to_dir = data_dir+class, \ 
          save_prefix=class, save_format='jpg'): 
    i += 1 
    if i > nb_fold-1: 
     break 

私の考えでは、ランダムに「tf.image」関数を用いて入力画像を変更し、tf.imageの出力を使用することですトレーニングの前に合成画像を生成するためにkeras.preprocessing.image.ImageDataGenerator()の入力として使用します。

私は問題がsession.run(img)から来たと思います。 なぜそれが起こり、どのように解決するのか分かりません。

ありがとうございました!

+0

画像の寸法は?彼らが大きすぎる可能性があります。 –

+0

@RobertValencia 2D画像、その大部分は1280 x 720です。tf.imageを使用するには大きすぎますか? – Jundong

+0

エラーは、指定されたコードではなく、ロードされているGraphDefに関連していることを示しています。どのようにしてプログラムに取り込むのですか?https://www.tensorflow.org/extend/tool_developers/#graphdef –

答えて

0

1280x 720は、であり、である可能性があります。画像/動画認識で同様のディメンションを使用した場合、私は同じ問題を抱えていました。 4要因によってあなたのイメージをダウン小型化に試してみてください、そしてもう一度試してみてください。

columns = 1280/4 
rows = 720/4 

img = cv2.imread(img_handle) 
img = cv2.resize(img, (columns, rows)) 
# add the rest of your code here 

または、越えて拡大するからグラフを防ぐために、セッションごとに異なるデフォルトグラフを使用してみてください2 GBの制限:

with tf.Session() as session, tf.Graph().as_default(): 
    img = session.run(img) 

最後に、天皇グラフを視覚化するためのボードhttps://www.tensorflow.org/get_started/graph_viz

+0

私は確かに、トレーニングの前に画像を小さなサイズにリサイズする必要があります。しかし、このsession.run()関数でイメージのサイズが問題になるのはなぜですか? – Jundong

+0

新しい画像を生成している間、画像のサイズを変更しようとします。ありがとうございました! – Jundong

+0

エラーが正確に発生するのはいつですか? –

関連する問題