Понимание прогнозов модели Neural Net - PullRequest
0 голосов
/ 05 мая 2020

В основном у меня есть набор картинок. Основываясь на данных ярлыках, скажем «собака» и «что угодно, кроме собаки», я обучил сверточную нейронную модель net. Я закодировал «собака» как 1 , а все остальные метки - 0 . Однако когда я делаю model.predict(image), мой результат выглядит как [[0.07502381]]. Хотя я понимаю, что должен получать значения и вероятности softmax, я не знаю, как интерпретировать это значение, отображаемое во вложенном массиве. Общая структура моего кода следующая:

  1. Подготовка обучающих изображений [использование cv2.imread для чтения изображений как Grayscale и cv2.resize для изменения размера массива изображений]
  2. Создайте обучающий массив, в котором каждый элемент выглядит так: [[image_array], label], [[image_array], label], ...
  3. Изменил размер каждого массива изображений следующим образом - np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 1) и отсортировал его в X. Каждая соответствующая метка (0 и 1) была сохранена в Y
  4. Я разделил X на 255,0 и передал его в модель, которую я создал с помощью Sequential (). Я только что провел одну эпоху, и точность показывает около 97% (что меня очень удивило, может быть, я переоснащаю?) Это модель:

    model = Sequential ()

    model .add (Conv2D (64, (3,3), input_shape = X1.shape [1:])) model.add (Activation ("relu")) model.add (MaxPooling2D (pool_size = (2,2)))

    model.add (Conv2D (64, (3,3))) model.add (Activation ("relu")) model.add (MaxPooling2D (pool_size = (2,2)))

    model.add (Flatten ()) model.add (Dense (64))

    model.add (Dense (1)) model.add (Activation ("sigmoid"))

    model.compile (loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['precision'])

    model.fit (X, Y, batch_size = 32, validation_split = 0.1)

  5. Затем я подготовил тестовые изображения таким же образом - прочитал их как GrayScale, разделил их на 255,0 и изменил их размер до нужных размеров - именно в этом порядке.

  6. А затем я просто использовал model.predict для каждого тестового изображения.

Код тоже long, но это общая структура.

Результат такой, как я описал выше - [[0.0028034213]] или [[0.11553983]]. Нет значений больше 0,5, поэтому я даже не могу установить порог, который будет выводить 1 (Собака), если прогнозируемое значение больше 0,5, и 0 в противном случае. Я не уверен, сделал ли я ошибку в своем коде, но я не могу интерпретировать эти предсказанные значения. Я впервые создаю нейронную систему net. Был бы признателен за руководство!

...