`decode_predictions` ожидает пакет предсказаний (то есть двумерный массив формы (сэмплы, 1000)).Найден массив с формой: (1, 5) - PullRequest
0 голосов
/ 07 июня 2018

Переобучил модель inception_v3 для моих собственных тестовых данных.(Предыстория: я просто пытаюсь понять, как работает весь процесс, прежде чем я попробую его на своей «проблеме» класса 130)

Теперь я получил .h5.Я попытался импортировать его и предсказать какое-то изображение.Но я получаю только следующие сообщения об ошибках.

ValueError: `decode_predictions` expects a batch of predictions (i.e. a 2D array of shape (samples, 1000)). Found array with shape: (1, 5)

Может кто-нибудь сказать мне, что я делаю ужасно неправильно?

мои мысли: я прочитал что-то, что мне нужно вектор 1000 вероятностей (для 1000 классов), но у меня их нет.Как создать такой вектор и установить для всех 1000-my_num_of_classes (в моем случае 5) значение 0?Я предполагаю, что мне нужно предварительно сформировать двумерный массив размером 1000. Но он не понимает, что представляют собой «образцы» или, в моем случае, «1».Или я должен написать некоторое соответствие для моего массива [1.0592173e-07 8.3998479e-09 9.9305904e-01 4.8276172e-05 6.8924953e-03] (в моем случае).Где я интерпретирую, что класс 3 (id 2) (который прошел обучение) имеет наибольшую вероятность?Так может быть, как файл, где у меня есть все обученные классы в порядке, как обученные?сопоставить самое высокое с соответствующей строкой (меткой)?

Было бы здорово:)

Это был бы мой код для предсказания

# Testing Inceptionv3
#from keras.applications.imagenet_utils import decode_predictions
import numpy as np
from keras.applications.inception_v3 import decode_predictions
import matplotlib.pyplot as plt
import os
from keras.models import load_model
from PIL import Image

my_model = load_model('my_model.h5')
#images = transform_img_fn([os.path.join('data','rose.jpg')])
img = Image.open('./data/rose.jpg')
img = img.resize((150,150))
img = np.array(img)
img = img / 255.0
img = img.reshape(1,150,150,3)

#base_model = inc_net.InceptionV3(weights='imagenet', include_top=False)

preds = my_model.predict(img)
for x in decode_predictions(preds)[0]:
    print(x)

1 Ответ

0 голосов
/ 07 июня 2018

Утилита decode_predictions преобразует предсказания классов предварительно обученной модели ImageNet в соответствующие читаемые человеком классы ImageNet.

Использование «decode_predictions» имеет смысл, только если ваша модель выводит классы ImageNet (1000-мерные).Ваша модель (my_model), по-видимому, возвращает прогнозы для 5 классов.Это не модель ImageNet.

...