老是碰见这种问题,解决方法是:
如果数据集加载了 image_dataset_from_directory
, use label_mode='categorial'
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
path,
label_mode='categorial'
)
或加载flow_from_directory
,flow_from_dataframe
then useclass_mode='categorical'
train_ds = ImageDataGenerator.flow_from_directory(
path,
class_mode='categorical'
)
范畴交叉熵(Categorical Cross entropy):
model = Sequential([
Conv2D(32,3, activation='relu', input_shape=(48,48,1)),
BatchNormalization(),
MaxPooling2D(pool_size=(3, 3)),
Flatten(),
Dense(512, activation='relu'),
Dense(2,activation='softmax') # activation change
])
model.compile(optimizer='adam',
loss='categorical_crossentropy', # Loss
metrics=['accuracy'])
二元交叉熵(Binary Crossentropy)
model = Sequential([
Conv2D(32,3, activation='relu', input_shape=(48,48,1)),
BatchNormalization(),
MaxPooling2D(pool_size=(3, 3)),
Flatten(),
Dense(512, activation='relu'),
Dense(1,activation='sigmoid') #activation change
])
model.compile(optimizer='adam',
loss='binary_crossentropy', # Loss
metrics=['accuracy'])
我的训练时因为加了下面两句话才开始正常训练的
MaxPooling2D(pool_size=(3, 3)),
Flatten(),
训练如下所示: