Почему модель дает вероятность, близкую к 1, для отрицательных примеров? - PullRequest
0 голосов
/ 20 апреля 2019

Это не то, что я ожидал!

Я обучил CNN на SVHN .Точность близка к ~ 0,93, и в целом она работает очень хорошо при тестировании на изображениях с одним номером.Поэтому, если я тестирую модель с изображениями, которые содержат одно число, например:

enter image description here

, то он отлично работает с ожидаемой вероятностью класса, близкой к 1.Но если я предоставлю модель со случайными изображениями, такими как house или lion, она все равно будет предсказывать класс с вероятностью, близкой к 1. Я не могу понять причину этого.Он должен был предсказать очень низкие вероятности для каждого класса.

Вот как я создал сеть.

     import tensorflow.keras as keras

     model = keras.Sequential()

    # First Conv Layer
    model.add(keras.layers.Conv2D(filters = 96, kernel_size = (11,11), strides = (4,4), padding = "same", input_shape=(227,227,3)))
    model.add(keras.layers.Activation("relu"))
    model.add(keras.layers.BatchNormalization())
    model.add(keras.layers.MaxPooling2D(pool_size = (3,3), strides = (2,2), padding="same"))


    # .. More Convolution Layer ... 

    # .. SOME Fully Connected Layers ..

    # Final Fully Connected Layer
    model.add(keras.layers.Dense(10))

    model.add(keras.layers.Activation("softmax"))

    model.compile(loss="categorical_crossentropy", optimizer=keras.optimizers.RMSprop(lr=0.0001), metrics=['accuracy'])


    data_generator = keras.preprocessing.image.ImageDataGenerator(rescale = 1./255)

    train_generator = data_generator.flow_from_directory(
            'train',
            target_size=(227, 227),
            batch_size=batch_size,
            color_mode='rgb',
            class_mode='categorical'
    )

    model.fit_generator(
        train_generator
        epochs = 12, 
        steps_per_epoch = math.ceil(num_train_samples / batch_size), 
        verbose = 2
    )

Как можно видеть из кода, которым я поделился выше, я использовал:

  • Функция потери как categorical_crossentropy
  • Функция активации конечного слоя как softmax

Есть 10 классов от 0 до 9. Буду ли я такженужно иметь 11-й класс, который имеет несколько случайных изображений?Но это звучит очень странно.Я выбрал неправильные функции потери / активации?

1 Ответ

0 голосов
/ 20 апреля 2019

Это может помочь вам обучить вашу сеть изображениям чисел и включить некоторые другие случайные изображения (домов или львов) и пометить их все как «не числа». Сверточная нейронная сеть смотрит не на весь ваш образ сразу, а на кусочки за раз. Он может легко найти под фигуры, которые тоже напоминают числа.

Ваша потеря и активация в порядке.

...