2017-05-24 11 views
0

こんにちはこれは、画像を分類するためのテンソルフローを使用したKerasバックエンドでCNNを実装するためのコードです 私はどの部分が間違っているのか分かりません。ValueError:ジェネレータの出力は、 `(x、y、sample_weight)タプルまたは`(x、y) `のタプルでなければなりません。見つかった:なし

from keras.preprocessing.image import ImageDataGenerator 
from keras.models import Sequential 
from keras.layers import Conv2D, MaxPooling2D 
from keras.layers import Activation, Dropout, Flatten, Dense 
from keras import backend as K 

img_width, img_height = 224, 224 

train_data_dir = '/Users/CK/data/train' 
validation_data_dir = '/Users/CK/data/validation' 

nb_train_samples = 47000 
nb_validation_samples = 47000 
epochs = 50 
batch_size = 10 

if K.image_data_format() == 'channels_first': 
    input_shape = (3, img_width, img_height) 
else: 
    input_shape = (img_width, img_height, 3) 

model = Sequential() 
model.add(Conv2D(12,(3,3),input_shape=input_shape)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2,2))) 

model.add(Conv2D(12,(3,3))) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2,2))) 

model.add(Conv2D(12,(3,3))) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2,2))) 

model.add(Flatten()) 
model.add(Dense(64)) 
model.add(Activation('relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(1)) 
model.add(Activation('sigmoid')) 

model.compile(loss='categorical_crossentropy', optimizer = 'adam', metrics=['accuracy']) 

train_datagen = ImageDataGenerator(
     rescale=1./255, 
     shear_range=0.2, 
     zoom_range=0.2, 
     horizontal_flip=True 
     ) 

test_datagen = ImageDataGenerator(rescale=1./255) 
train_generator = train_datagen.flow_from_directory(train_data_dir, target_size = (img_width, img_height), 
                batch_size=batch_size, class_mode='categorical') 
validation_generator = test_datagen.flow_from_directory(validation_data_dir,target_size=(img_width, img_height), 
                 batch_size=batch_size, class_mode='categorical') 

model.fit_generator(train_generator, 
        steps_per_epoch=nb_train_samples// batch_size, epochs=epochs, 
        validation_data=validation_generator, validation_steps=nb_validation_samples // batch_size) 

しかし、私はエラー私は問題を解決するにはどうすればよい

runfile('/Users/CK/Desktop/test.py', wdir='/Users/CK/Desktop') 
Found 46827 images belonging to 9 classes. 
Found 46827 images belonging to 9 classes. 
Epoch 1/50 
Exception in thread Thread-7: 
Traceback (most recent call last): 
    File "/Users/CK/anaconda/envs/tensorflow/lib/python3.5/threading.py", line 914, in _bootstrap_inner 
    self.run() 
    File "/Users/CK/anaconda/envs/tensorflow/lib/python3.5/threading.py", line 862, in run 
    self._target(*self._args, **self._kwargs) 
    File "/Users/CK/anaconda/envs/tensorflow/lib/python3.5/site-packages/keras/engine/training.py", line 612, in data_generator_task 
    generator_output = next(self._generator) 
    File "/Users/CK/anaconda/envs/tensorflow/lib/python3.5/site-packages/keras/preprocessing/image.py", line 727, in __next__ 
    return self.next(*args, **kwargs) 
    File "/Users/CK/anaconda/envs/tensorflow/lib/python3.5/site-packages/keras/preprocessing/image.py", line 960, in next 
    target_size=self.target_size) 
    File "/Users/CK/anaconda/envs/tensorflow/lib/python3.5/site-packages/keras/preprocessing/image.py", line 318, in load_img 
    raise ImportError('Could not import PIL.Image. ' 
ImportError: Could not import PIL.Image. The use of `array_to_img` requires PIL. 

Traceback (most recent call last): 

    File "<ipython-input-13-15de1a62b9cf>", line 1, in <module> 
    runfile('/Users/CK/Desktop/test.py', wdir='/Users/CK/Desktop') 

    File "/Users/CK/anaconda/envs/tensorflow/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py", line 880, in runfile 
    execfile(filename, namespace) 

    File "/Users/CK/anaconda/envs/tensorflow/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile 
    exec(compile(f.read(), filename, 'exec'), namespace) 

    File "/Users/CK/Desktop/test.py", line 66, in <module> 
    validation_data=validation_generator, validation_steps=nb_validation_samples // batch_size) 

    File "/Users/CK/anaconda/envs/tensorflow/lib/python3.5/site-packages/keras/legacy/interfaces.py", line 88, in wrapper 
    return func(*args, **kwargs) 

    File "/Users/CK/anaconda/envs/tensorflow/lib/python3.5/site-packages/keras/models.py", line 1110, in fit_generator 
    initial_epoch=initial_epoch) 

    File "/Users/CK/anaconda/envs/tensorflow/lib/python3.5/site-packages/keras/legacy/interfaces.py", line 88, in wrapper 
    return func(*args, **kwargs) 

    File "/Users/CK/anaconda/envs/tensorflow/lib/python3.5/site-packages/keras/engine/training.py", line 1865, in fit_generator 
    str(generator_output)) 

ValueError: output of generator should be a tuple `(x, y, sample_weight)` or `(x, y)`. Found: None 

を得ましたか。皆さんがコードを詳細に修正するのを助けていただければ幸いです。 THX

答えて

0

あり2つのエラーがここに

  1. はImportError PIL

    ため

とValueError

であり、私は2番目の1が最初に依存していると思います。どうして?

必要なライブラリが存在しないため画像データが破損している可能性があり、このデータで検証すると奇妙な値を返す可能性があるためです。

では、次のコマンドうまくいけば、あなたの第二の問題も解決されます

# sudo does not require if you are using virtualenv 
    $ sudo pip install Pillow 

PILをインストールする必要があります最初に解決します。

+0

私は最初の問題を修正しましたが、別の値のエラーが発生しました... –

+0

@ScottKimそれはなんですか? – Rahul

0

ファイルをtrain_data_dir、validation_data_dirに作成し、次にこのファイルに画像を格納する必要があります。

+0

もう少し説明してください?どのようにしてこの問題が解決されますか? – Ray