我的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 = 224batch_size=64train_data_dir = r"./crack_dataset/train"validation_data_dir = r"./crack_dataset/validate"nb_train_samples = 3416nb_val_samples = 612train_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'))
2 回答
BIG阳
TA贡献1859条经验 获得超6个赞
这是一个评论,但太长了,所以我切换到一个正确的答案。
我还没有尝试过你的CNN,但我会修改你的图层。我不是设计CNN架构的专家,但我不认为连续有2层具有相同参数(第5层和第6层)的意义,这对我迄今为止所学到的东西来说毫无用处。尝试使用一些简单的体系结构,并从那里“纵向扩展”(就体系结构的复杂性而言)。
此外,在“单位数量”(第1,第3,第5,第6,第7层,Conv2D)方面上下可能不是最好的策略,每次你上升时,你都会根据要获得的特征进行概括,因为你从更少的特征开始,你要求你的网络从较小的集合创建特征。在某些情况下,它可能很有用,但我不认为这是其中之一。
对于重新缩放,您不需要调用“ImageDataGenerator”,您可以通过以下方式获得相同的结果:
train_datagen = train_datagen/255.0
尽可能简化。
添加回答
举报
0/150
提交
取消