Ich versuche flow_from_directory
zu verwenden, um mein Modell zu trainieren. Der Verlust, den ich verwende, ist binary_crossentropy
, der den Aufruf der to_categorical
-Funktion auf den Y_train
Daten erfordert. Ich weiß nicht, wie das zu tun für flow_from_directory
, und das Programm wird den folgenden Fehler zu werfen:Keras: Verwenden von `crossentropy` Verlust in` flow_from_directory`
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)
Der Datengenerator ich verwende ist:
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'
)
Und die fit_generator
ist:
model.fit_generator(
train_generator,
steps_per_epoch=2500,
epochs=25
)
löst Also, wenn ich will "kategorische" Crossentropie, statt binär, für, sagen wir, 10 Klassen, dann verwende ich noch 'Dichte (1, Aktivierung = 'Sigmoid')' oder 'Dichte (Klassen, Aktivierung = 'Softmax')'? – Prabaha
dann verwenden Sie Dense (10, Aktivierung = 'Softmax')! Wenn Sie kategorisch arbeiten, ist jedes Ausgabe-Neuron eine Klasse, die Softmax macht die Ausgabe normalisiert, so dass die Summe aller Neuronen 1 ist, idealerweise erhalten Sie etwas wie [0, 0, 1, 0, 0, 0, 0 , 0, 0, 0], aber höchstwahrscheinlich: [0.1, 0.2, 0, 0.05, 0.1, 0.05, 0.00, 0, 0.5] und sagt Ihnen, welche die wahrscheinlichste Klasse ist. –