我的Keras CNN模型(基于AlexNet的实现)的训练精度始终接近0.5(在+-0.02范围内),并且验证精度始终为0.5,无论哪个时期。它是一个二元分类模型,其中训练/val 拆分大约为 85/15,在这两个集合中,每个类的图像拆分为 50/50。
无论我使用哪种模型架构,还是使用随机或ImageNet权重初始化,验证精度始终为0.5。事实上,当我没有将图像分成50/50的二元分类时,验证准确性将反映这一点(因此,当我有更多属于一个类的图像时,验证精度将始终为0.85)。
由于最后一点,我怀疑问题不在于模型或权重优化,而在于我对ImageDataGenerator类的实例化 - 尽管这只是现阶段的一种有教养的预感。
我已经在下面包含了我的代码,任何人都可以找到任何明显的错误吗?
sz=224 # image width = height = 224
batch_size=64
train_data_dir = r"./crack_dataset/train"
validation_data_dir = r"./crack_dataset/validate"
nb_train_samples = 3416
nb_val_samples = 612
train_datagen = ImageDataGenerator(rescale=1./255)
validation_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(train_data_dir,
target_size = (sz, sz),
batch_size=batch_size,
class_mode='binary')
validation_generator = validation_datagen.flow_from_directory(validation_data_dir,
target_size = (sz, sz),
batch_size=batch_size,
class_mode='binary')
# Create Model
model = Sequential()
model.add(Conv2D(filters=96, input_shape=input_shape, kernel_size=(11,11), strides=(4,4), padding='valid', activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='valid'))
model.add(Conv2D(filters=256, kernel_size=(11,11), strides=(1,1), padding='valid', activation='relu'))
慕容3067478
BIG阳
相关分类