Почему моя путаница "сдвинута" вправо? - PullRequest
0 голосов
/ 03 июля 2019

Я построил классификатор из 4 типов цветов на основе ResNet 50. Точность действительно высокая во время тренировок, и все кажется хорошим. Однако, когда я строю свою матрицу путаницы, я вижу, что значения «смещены» вправо, а не по главной диагонали.

Что это значит? Это проблема с моим набором данных или моим кодом?

Confusion Matrix

Вот что я сделал, чтобы использовать ResNet 50:

def create_model(input_shape, top='flatten'):
    if top not in ('flatten', 'avg', 'max'):
        raise ValueError('unexpected top layer type: %s' % top)

    # connects base model with new "head"
    BottleneckLayer = {
        'flatten': Flatten(),
        'avg': GlobalAvgPooling2D(),
        'max': GlobalMaxPooling2D()
    }[top]

    base = InceptionResNetV2(input_shape=input_shape,
                             include_top=False, 
                             weights='imagenet')

    x = BottleneckLayer(base.output)
    x = Dense(NUM_OF_FLOWERS, activation='linear')(x)
    model = Model(inputs=base.inputs, outputs=x)
    return model

    base = ResNet50(input_shape=input_shape, include_top=False)
    x = Flatten()(base.output)
    x = Dense(NUM_OF_FLOWERS, activation='softmax')(x)
    model = Model(inputs=base.inputs, outputs=x)

Генерация матрицы путаницы:

# Predict the values from the validation dataset
Y_pred = model.predict_generator(validation_generator, nb_validation_samples // batch_size+1)
# Convert predictions classes to one hot vectors 
Y_pred_classes = numpy.argmax(Y_pred, axis = 1) 
# Convert validation observations to one hot vectors
Y_true = validation_generator.classes 
# compute the confusion matrix
confusion_mtx = confusion_matrix(Y_true, Y_pred_classes) 
# plot the confusion matrix
plot_confusion_matrix(confusion_mtx, classes = range(4))

Как я и просил, вот как я создал генераторы:

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    color_mode='rgb',
    class_mode='categorical',
    shuffle=True)

validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    color_mode='rgb',
    class_mode='categorical',
    shuffle=False)

Вот альбом изображений моей матрицы путаницы. Каждый раз, когда я выполняю model.predict (), прогнозы меняются, всегда смещаясь на одну ячейку вправо.

Альбом Matrix Confusion

Ответы [ 2 ]

1 голос
/ 03 июля 2019

смотри класс validation_generator. когда вы используете data_generator.flow_from_directory, вам нужно посмотреть, равно ли param shuffle False, как в примере выше:

 val_generator = val_data_generator.flow_from_directory(
        test_data_dir,
        target_size=(IMAGE_WIDTH, IMAGE_HEIGHT),
        batch_size=100,
        class_mode="binary",
        classes=['dog','cat'],
        shuffle=False)  

потому что параметр по умолчанию - «Истина», и только тасуются изображения, а не метки.

1 голос
/ 03 июля 2019

Да, я представляю, что это код, проверьте свою индексацию, где вы создаете матрицу путаницы, она будет отключена на один

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...