代码之家  ›  专栏  ›  技术社区  ›  Laurent R

低准确度-转移学习+瓶颈keras tensorflow(resnet50)

  •  1
  • Laurent R  · 技术社区  · 8 年前

    我正在尝试转移学习/瓶颈 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\u acc=0.0592

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

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   Laurent R    8 年前

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

    这些修改非常有帮助:

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

    我现在有80%的准确率