В основном у меня есть набор картинок. Основываясь на данных ярлыках, скажем «собака» и «что угодно, кроме собаки», я обучил сверточную нейронную модель net. Я закодировал «собака» как 1 , а все остальные метки - 0 . Однако когда я делаю model.predict(image)
, мой результат выглядит как [[0.07502381]]
. Хотя я понимаю, что должен получать значения и вероятности softmax, я не знаю, как интерпретировать это значение, отображаемое во вложенном массиве. Общая структура моего кода следующая:
- Подготовка обучающих изображений [использование cv2.imread для чтения изображений как Grayscale и cv2.resize для изменения размера массива изображений]
- Создайте обучающий массив, в котором каждый элемент выглядит так: [[image_array], label], [[image_array], label], ...
- Изменил размер каждого массива изображений следующим образом -
np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 1)
и отсортировал его в X. Каждая соответствующая метка (0 и 1) была сохранена в Y Я разделил 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)
Затем я подготовил тестовые изображения таким же образом - прочитал их как GrayScale, разделил их на 255,0 и изменил их размер до нужных размеров - именно в этом порядке.
- А затем я просто использовал model.predict для каждого тестового изображения.
Код тоже long, но это общая структура.
Результат такой, как я описал выше - [[0.0028034213]]
или [[0.11553983]]
. Нет значений больше 0,5, поэтому я даже не могу установить порог, который будет выводить 1 (Собака), если прогнозируемое значение больше 0,5, и 0 в противном случае. Я не уверен, сделал ли я ошибку в своем коде, но я не могу интерпретировать эти предсказанные значения. Я впервые создаю нейронную систему net. Был бы признателен за руководство!