2017-07-16 16 views
2

flow_from_directoryを使用してモデルをトレーニングしようとしています。私が使用している損失はbinary_crossentropyで、Y_trainデータのto_categorical関数を呼び出す必要があります。私はflow_from_directoryのためにそれを行う方法がわからないと、プログラムは次のエラーを投げている:Keras: `flow_from_directory`で` crossentropy`の損失を使用

Traceback (most recent call last): 
    File "vgg16-sim-conn-rmsprop-2-main.py", line 316, in <module> 
    epochs=25 
    File "/home/yx96/anaconda2/lib/python2.7/site-packages/keras/legacy/interfaces.py", line 8 
8, in wrapper 
    return func(*args, **kwargs) 
    File "/home/yx96/anaconda2/lib/python2.7/site-packages/keras/engine/training.py", line 187 
6, in fit_generator 
    class_weight=class_weight) 
    File "/home/yx96/anaconda2/lib/python2.7/site-packages/keras/engine/training.py", line 161 
4, in train_on_batch 
    check_batch_axis=True) 
    File "/home/yx96/anaconda2/lib/python2.7/site-packages/keras/engine/training.py", line 129 
9, in _standardize_user_data 
    exception_prefix='model target') 
    File "/home/yx96/anaconda2/lib/python2.7/site-packages/keras/engine/training.py", line 133 
, in _standardize_input_data 
    str(array.shape)) 
ValueError: Error when checking model target: expected predictions to have shape (None, 2) b 
ut got array with shape (100, 1) 

私が使用していたデータ・ジェネレータは、次のとおりです。

train_datagen = ImageDataGenerator(
    featurewise_center=True, 
    horizontal_flip=True, 
    zoom_range=0.2, 
    data_format="channels_last" 
) 

train_generator = train_datagen.flow_from_directory(
    './train', 
    target_size=(224, 224), 
    batch_size=100, 
    class_mode='binary' 
) 

そしてfit_generatorは次のとおりです。

model.fit_generator(
    train_generator, 
    steps_per_epoch=2500, 
    epochs=25 
) 

答えて

1

損失の場合はbinary_crossentropyを使用している場合は、class_mode='binary'を設定する権利がありました。

あなたが私たちにモデルを表示していないためにあなたのポストに表示されていない場所は、モデルの最後のレイヤーです。

あなたはおそらくDense(2, activation='softmax')を持っています。これは、「ワンホット」またはカテゴリカルなクロスエントロピー版です。私が望むなら、私は、これがそう

+0

:-)あなたの問題を解決を願ってい

Dense(1, activation = 'sigmoid') 

:あなたはこのようにそれを行う0と1の間になりますバイナリ、あなただけの出力値を一つ仕事をしたい場合バイナリの代わりに 'カテゴリー的な'クロスエントロピーをするために、例えば10個のクラスについて、 'Dense(1、activation = 'sigmoid')'や 'Dense(class、activation = 'softmax')' – Prabaha

+1

次に、Dense(10、activation = 'softmax')を使用します。あなたがカテゴリー別に作業するとき、すべての出力ニューロンは1つのクラスです。softmaxは出力を正規化して、すべてのニューロンの合計が1になるようにします。理想的には[0、0、1、0、0、0、0 、0,0,0]、最も可能性が高い:[0.1、0.2、0、0.05、0.1、0.05、0.00、0、0.5] –

関連する問題