IndexError: индекс 917 выходит за пределы для оси 0 с размером 11, на npargmax в тензорном потоке - PullRequest
0 голосов
/ 03 мая 2019

Я использую пример здесь классифицировать изображения. У меня 2147 изображений, относящихся к 11 классам. Я запускаю классификатор на пакет изображений. Пока программа идет хорошо, но я не могу назначить метки, потому что я получаю следующую ошибку в коде: labels_batch=image_labels[np.argmax(result_batch, axis=-1)]

Traceback (последний вызов был последним):>> tags_batch = image_labels [np.argmax (result_batch, axis = -1)] IndexError: индекс 917 выходит за пределы оси 0 с размером 11

Дополнительная информация: Мои ярлыки categories = ["Categorical_Boxplot", "Column_Charts", "Dendogram", "Heatmap", "Line_Chart", "Map","Node-Link_Diagram", "Ordination_Scatterplot", "Pie_Chart", "Scatterplot", "Stacked_Area_Chart"]

и вот как я пытаюсь присвоить этот ярлык классификатору

image_labels = np.array(categories)

result_batch = classifier_model.predict(image_batch)
labels_batch = image_labels[np.argmax(result_batch, axis=-1)]
labels_batch

result_batch.shape

(32, 1001)

Форма моих данных

Форма пакета изображения: (32, 224, 224, 3) Форма партии этикетки: (32, 11)

Я не знаю, где я иду не так и как я могу это исправить? Я уже пытался добавить image_labels к tags_batch вместо назначения его с =. Но это не сработало.

Классификатор:

classifier_url = "https://tfhub.dev/google/imagenet/mobilenet_v2_100_224/classification/2" #@param {type:"string"}
IMAGE_SIZE = hub.get_expected_image_size(hub.Module(classifier_url))
classifier_layer = layers.Lambda(classifier, input_shape=IMAGE_SIZE + [3])
classifier_model = tf.keras.Sequential([classifier_layer])
classifier_model.summary()

1 Ответ

1 голос
/ 03 мая 2019

Ваше определение модели неполное. Модель из учебника имеет 1001 класс, в то время как ваша модель имеет только 11 классов, поэтому вы должны прикрепить новую головку класса к вашей модели следующим образом.

classifier_url = "https://tfhub.dev/google/imagenet/mobilenet_v2_100_224/classification/2" #@param {type:"string"}
IMAGE_SIZE = hub.get_expected_image_size(hub.Module(classifier_url))
classifier_layer = layers.Lambda(classifier, input_shape=IMAGE_SIZE + [3])
classifier_model = tf.keras.Sequential([classifier_layer, layers.Dense(11, activation='softmax')])
classifier_model.summary()
...