【问题标题】:VGG16 extremely low accuracy on acne gradingVGG16 对痤疮分级的准确度极低
【发布时间】:2021-01-19 21:19:47
【问题描述】:

我正在尝试构建具有 3 个类别(0 级、1 级、2 级)的 ance 分级分类器。我在数据集中没有很多图像(每个类大约 500 个)。因此我使用了 VGG16 预训练模型。但是,准确度确实很低(~0.33),并且随着训练几乎没有增加。

# Load VGG16 model
vgg_model = VGG16(weights="imagenet", 
                  include_top=False, 
                  input_tensor=Input(shape=(224,224,3)))
vgg_model.summary()

#make the model layers untrainable
for layer in vgg_model.layers:
    layer.trainable = False

# Add output layer
output_model = vgg_model.output
output_model = layers.Dropout(0.25)(output_model)
output_model = layers.Flatten()(output_model)
output_model = layers.Dense(128,activation="relu")(output_model)
output_model = layers.Dropout(0.5)(output_model)
output_model = layers.Dense(3,activation="softmax")(output_model)

vggmodel = models.Model(inputs=vgg_model.input, outputs=output_model)

vggmodel.summary()


# Image augmentation on training set
train_datagen = ImageDataGenerator(
    rotation_range = 40,
    width_shift_range = 0.2,
    height_shift_range = 0.2,
    shear_range = 0.15,
    rescale = 1./255,
)

# only rescale on validation set
validate_datagen = ImageDataGenerator(
    rescale = 1./255
)

#set size of batches of data to 64
batch_size = 64
#resizing to 224x224
target_size = (224, 224)

# initialize the training data augmentation object
train_generator = train_datagen.flow_from_directory(directory=training_path, class_mode="categorical",
                                                  batch_size=batch_size, target_size=target_size, color_mode='rgb', shuffle= True)
validation_generator = validate_datagen.flow_from_directory(directory=validation_path, class_mode="categorical",
                                                  batch_size=batch_size, target_size=target_size, color_mode='rgb', shuffle= True)

vggmodel.compile(loss="categorical_crossentropy", optimizer=SGD(0.01),metrics=["accuracy"])

earlystopping = keras.callbacks.EarlyStopping(monitor ="val_loss",  
                                        mode ="min", patience = 2,  
                                        restore_best_weights = True) 

vggmodel.fit(train_generator, steps_per_epoch=int(1166/batch_size), epochs= 100,
                        validation_data=validation_generator, validation_steps=5, callbacks=[earlystopping])

我也尝试过构建自己的模型,但性能相似。

input_shape = (224,224,3)
cnn_model = models.Sequential()
cnn_model.add(layers.Conv2D(64, (3, 3), activation='relu',
                               input_shape=input_shape))
cnn_model.add(layers.Conv2D(64, (3, 3), activation='relu',
                                input_shape=input_shape))
cnn_model.add(layers.MaxPool2D((2, 2)))
cnn_model.add(layers.Conv2D(64, (3, 3), activation='relu',
                                input_shape=input_shape))
cnn_model.add(layers.MaxPool2D((2, 2)))
cnn_model.add(layers.Dropout(0.25))
cnn_model.add(layers.Flatten())
cnn_model.add(layers.Dense(128, activation='relu'))
cnn_model.add(layers.Dropout(0.5))
cnn_model.add(layers.Dense(3, activation='softmax'))
cnn_model.summary()

cnn_model.compile(loss="categorical_crossentropy", optimizer=SGD(0.01),metrics=["accuracy"])


earlystopping = keras.callbacks.EarlyStopping(monitor ="val_loss",  
                                        mode ="min", patience = 2,  
                                        restore_best_weights = True) 

cnn_model.fit(train_generator, steps_per_epoch=int(1248/batch_size), epochs= 15,
                        validation_data=validation_generator, validation_steps=2)

我做错了什么?对不起,我是初学者:/

【问题讨论】:

  • 哪个准确率低?训练还是验证?你也可以分享你的损失值吗?
  • 两者都很低,训练准确率为~0.33,验证准确率为~0.37
  • 你是怎么想到这个的? steps_per_epoch=int(1248/batch_size)
  • 是的,我也改变了优化器。在最后一轮尝试了 Adam(0.001),在提前停止停止之前得到了大约 0.5。感谢您的帮助!
  • 尝试通过增加第 3 类来平衡您的数据集。这也是 ML 中的一个问题,如果你的数据有限,很难一概而论。增强是有助于泛化的最大因素。

标签: python tensorflow machine-learning keras deep-learning


【解决方案1】:
  1. 使用最大池化层,而不是展平层。
  2. This 用户必须将学习率降低到 0.001,才能获得可接受的结果。
  3. 使用较小的辍学率。例如 .2、.3。
  4. 33% 只是随机猜测。打印一些图片,看看它们的标签是否正确。
  5. 在一些示例图像上检查模型的输出。在某些列中是否太接近 1 或 0?它似乎只是随机的吗?

执行这些操作,您可能会发现错误。

【讨论】:

    猜你喜欢
    • 2016-08-22
    • 2020-02-12
    • 2020-03-04
    • 2014-05-10
    • 2016-01-04
    • 2020-02-11
    • 2020-10-01
    • 2018-10-09
    • 1970-01-01
    相关资源
    最近更新 更多