3分类口罩检测CNN模型训练报`y` argument is not supported错误如何解决
问题根因
你触发报错的直接原因是model.fit()的参数传递错误,除此之外还有多处和三分类任务不匹配的配置错误,需要一并修改。
修复步骤
第一步:修正
fit方法的参数传递
你当前的写法model.fit(train_generator, EPOCHS)中,第二个位置参数会被Keras识别为标签参数y,但train_generator作为Sequence类型的生成器已经自带了样本和对应标签,不需要单独传y,需要明确指定epochs的参数名,还可以补充验证集参数同步看训练过程中的验证指标:model.fit(train_generator, epochs=EPOCHS, validation_data=test_generator)第二步:修正数据生成器的分类模式
你当前配置的class_mode="binary"是二分类专属配置,三分类需要修改为categorical,同步修改两个生成器的对应参数:train_generator = datagen.flow_from_directory( DATASET_DIR, target_size = DIM_IMG, batch_size = BATCH_SIZE, class_mode = "categorical", subset = "training" ) test_generator = datagen.flow_from_directory( DATASET_DIR, target_size = DIM_IMG, batch_size = BATCH_SIZE, class_mode = "categorical", subset = "validation" )第三步:修正输出层配置
你当前的输出层只有1个神经元,不符合三分类的输出要求,且softmax用于1个神经元时无实际分类意义,需要改为3个神经元:model.add(Dense(3,activation='softmax'))第四步:修正损失函数配置
你当前用的binary_crossentropy是二分类损失函数,和categorical模式匹配的三分类损失需要改为分类交叉熵:model.compile(optimizer = "adam", loss = "categorical_crossentropy", metrics = ["accuracy"])
所有修改完成后重新运行即可正常训练。
内容的提问来源于stack exchange,提问作者bellapetezio
相关产品推荐
相关产品推荐

