【问题标题】:Low accurcacy - Transfer learning + bottle-neck keras-tensorflow (resnet50)低准确率 - 迁移学习 + 瓶颈 keras-tensorflow (resnet50)
【发布时间】:2018-05-09 23:05:44
【问题描述】:

我正在尝试在 google Colaboratory notebook 上使用 keras/tensorflow 进行迁移学习/瓶颈。我的问题是准确率不超过 6%(Kaggle 的犬种挑战,120 个类别,使用datagen.flow_from_directory 生成的数据)

下面是我的代码,有什么我遗漏的吗?

tr_model=ResNet50(include_top=False,
                  weights='imagenet',
                 input_shape = (224, 224, 3),)

datagen = ImageDataGenerator(rescale=1. / 255)

#### Training ####
train_generator = datagen.flow_from_directory(train_data_dir,
                                                    target_size=(image_size,image_size),
                                                    class_mode=None,
                                                    batch_size=batch_size,
                                                    shuffle=False)
bottleneck_features_train = tr_model.predict_generator(train_generator)
train_labels = to_categorical(train_generator.classes , num_classes=num_classes)

#### Validation ####
validation_generator = datagen.flow_from_directory(validation_data_dir, 
                                                    target_size=(image_size,image_size),
                                                    class_mode=None,
                                                    batch_size=batch_size,
                                                    shuffle=False)
bottleneck_features_validation = tr_model.predict_generator(validation_generator)
validation_labels = to_categorical(validation_generator.classes, num_classes=num_classes)

#### Model creation ####
model = Sequential()
model.add(Flatten(input_shape=bottleneck_features_train.shape[1:]))
model.add(Dense(num_class, activation='softmax'))

model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

history = model.fit(bottleneck_features_train, train_labels,
                    epochs=30,
                    batch_size=batch_size,
                    validation_data=(bottleneck_features_validation, validation_labels))

我得到一个 val_acc = 0.0592

当我在最后一层使用 ResNet50 时,我得到了 82% 的分数。

谁能发现我的代码有什么问题。

【问题讨论】:

  • 有点离题,但您的数据集有多大?我注意到您能够将所有bottle_neck_train_features 保留在内存中。目前,我正在将所有内容都保存到 hdf5 文件中,现在我很好奇是否需要这样做。
  • 数据集由 20k 个 jpeg 组成(Kaggle 上的狗品种挑战)

标签: tensorflow keras google-colaboratory


【解决方案1】:

抑制重新缩放并添加预处理有很大帮助。

这些修改非常有帮助:

from keras.applications.resnet50 import preprocess_input
datagen = ImageDataGenerator(preprocessing_function=preprocess_input)

我现在的准确率为 80%

【讨论】:

    猜你喜欢
    • 2019-05-07
    • 2019-01-30
    • 2021-10-14
    • 2023-03-30
    • 2020-02-11
    • 1970-01-01
    • 2020-05-13
    • 2021-06-03
    • 2021-09-26
    相关资源
    最近更新 更多