2016-06-23 9 views
6

私はケラスで画像クラスを予測しようとしています(バイナリ分類)。モデルの精度は問題ありませんが、ImageDataGeneratorは入力画像をシャッフルするので、予測されたクラスと元の画像を一致させることができませんでした。例えばケラス:クラスを順番に予測する方法は?

datagen = ImageDataGenerator(rescale=1./255) 

generator = datagen.flow_from_directory(
     pred_data_dir, 
     target_size=(img_width, img_height), 
     batch_size=32, 
     class_mode=None, 
     shuffle=False, 
     save_to_dir='images/aug'.format(feature)) 

print model.predict_generator(generator, nb_input) 

、私はa1.jpgは、a2.jpgは、...、a9.jpgpred_data_dirの下で、私はmodel.predict_generator()から

[class for a1.jpg, class for a2.jpg, ... class for a9.jpg] 

ような配列を得ることを期待、実際に私は

ようなものを持っている場合
[class for a3.jpg, class for a8.jpg, ... class for a2.jpg] 

どうすれば問題を解決できますか?

+1

これらの画像を予測することは避け、検証/テストセットを直接使用してください。 –

+1

ここでの目標は、精度スコアを取得するのではなく、新しいデータセットのラベルを予測することです。 – Yusuke

+0

はい、質問は意味をなさないので、トレーニングセットラベルは必要ありません。 –

答えて

5

flow_from_directoryのソースコードを見てください。私の場合は、すべての画像の名前を変更する必要がありました。彼らは1.jpg .. 1000.jpgと命名されましたが、順番になるためには0001.jpg .. 1000.jpgと命名されなければなりませんでした。ここでソートが重要です。

flow_from_directorysorted(os.listdir(directory))を使用するため、並べ替えは必ずしも直感的ではありません。

0

flow_from_directory()メソッドは、すべてのファイルを一覧表示するfilenamesメンバを持つDirectoryIteratorオブジェクトを返します。そのメンバーは後続のバッチ生成および反復に使用されるので、ファイル名を予測に一致させるために使用することができます。

たとえば、generator.filenamesは、['a3.jpg', 'a8.jpg', ..., 'a2.jpg']のような並列リストを表示する必要があります。

関連する問題