2017-07-16 56 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和1之間你做這樣的:

Dense(1, activation = 'sigmoid') 

我希望這所以解決您的問題:-)

+0

,如果我願意爲了說10個類而不是二元的,我還要用'密集(1,activation ='sigmoid')'還是'Dense(classes,activation ='softmax')''來做'categorical' crossentropy? – Prabaha

+1

然後你使用Dense(10,activation ='softmax')!當你在分類中工作時,每個輸出神經元都是一個類,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],告訴你哪一類最可能。 –

相關問題