为何下述Python代码训练的模型accuracy指标始终为0?
数据集信息
- 数据集类型:糖尿病视网膜病变224x224高斯滤波图像
- 存储位置:已保存至Google Drive
模型训练结果
完成15轮训练后的输出如下:
79/79 [==============================] - 15s 188ms/step - loss: 1.3196 - categorical_accuracy: 0.5105 - precision: 0.9507 - recall: 0.3597 - auc: 0.7881 - accuracy: 0.0000e+00 - val_loss: 1.0488 - val_categorical_accuracy: 0.6261 - val_precision: 0.9576 - val_recall: 0.3559 - val_auc: 0.8218 - val_accuracy: 0.0000e+00
训练集与验证集的accuracy曲线为x轴上的直线
完整训练代码
drive.mount('/content/drive') # 从Google Drive访问图像文件夹 folder_path = '/content/drive/MyDrive/gaussian_filtered_images' folders = next(os.walk(folder_path))[1] print(folders) # 统计数据集中的图像数量 images = [] label = [] # os.listdir返回文件夹中的文件列表,此处为图像类别名称 for i in os.listdir(folder_path): image_class = os.listdir(os.path.join(folder_path, i)) for j in image_class: img = os.path.join(folder_path, i, j) images.append(img) label.append(i) print('Number of images : {} \n'.format(len(images))) df = pd.DataFrame({'Image': images,'Labels': label}) train, test = train_test_split(df, test_size=0.2) y_train = train['Labels'].to_numpy().ravel() class_weights = class_weight.compute_class_weight(class_weight='balanced', classes=np.unique(y_train), y=y_train) class_weights_dict = dict(enumerate(class_weights)) train_datagen = ImageDataGenerator( rescale = 1./255, validation_split = 0.15) test_datagen = ImageDataGenerator(rescale = 1./255) # 加载训练数据 train_generator = train_datagen.flow_from_directory( train, directory='./', x_col="Image", y_col="Labels", target_size=(256, 256), color_mode="rgb", class_mode="categorical", batch_size=32, subset='training') # 加载验证数据 validation_generator = train_datagen.flow_from_directory( train, directory='./', x_col="Image", y_col="Labels", target_size=(256, 256), color_mode="rgb", class_mode="categorical", batch_size=32, subset='validation') # 加载测试数据 test_generator = test_datagen.flow_from_directory( test, directory='./', x_col="Image", y_col="Labels", target_size=(256, 256), color_mode="rgb", class_mode="categorical", batch_size=32) resnet_model = Sequential() pretrained_model=tf.keras.applications.ResNet50( include_top=False, weights="imagenet", input_tensor=None, # 匹配输入图像尺寸 input_shape=(256, 256, 3), pooling='avg', classes=5 ) for layer in pretrained_model.layers: layer.trainable=False resnet_model.add(tf.keras.layers.Lambda(tf.keras.applications.resnet50.preprocess_input)) resnet_model.add(pretrained_model) resnet_model.add(Flatten()) resnet_model.add(Dense(512, activation='relu')) resnet_model.add(Dense(5, activation='softmax')) resnet_model.compile( optimizer=Adam(learning_rate=0.001), loss='categorical_crossentropy', metrics=[ metrics.CategoricalAccuracy(), metrics.Precision(), metrics.Recall(), metrics.AUC(multi_label=True), metrics.Accuracy() ] ) epochs=15 history = resnet_model.fit( x=train_generator, validation_data=validation_generator, epochs=epochs, class_weight=class_weights_dict, )
内容的提问来源于stack exchange,提问作者GAH
相关产品推荐
相关产品推荐

