Как отобразить точность для всех 10 классов CIFAR10 в Python? - PullRequest
0 голосов
/ 15 апреля 2019

Я новый программист ML и работаю над кодом для отображения точности для всех классов. Код показывает только наиболее вероятный класс.

А также я положил в печать переменную результатов, чтобы посмотреть, что там было, это нормально, что все равно 0, кроме одного класса? должен быть какой-то вес и вероятность для всех классов?

весь проект посвящен трансферному обучению, я использую VGG16 в keras и cifar10, model_weights.h5 имеет функции, извлеченные из cifar10, а файл model_structure представляет собой файл JSON со структурой модели, vgg16 с плотной измененные слои

from keras.models import model_from_json
from pathlib import Path
from keras.preprocessing import image
import numpy as np

# These are the CIFAR10 class labels from the training data (in order from 0 to 9)
class_labels = [
    "Plane",
    "Car",
    "Bird",
    "Cat",
    "Deer",
    "Dog",
    "Frog",
    "Horse",
    "Boat",
    "Truck"
]

# Load the json file that contains the model's structure
f = Path("model_structure.json")
model_structure = f.read_text()

# Recreate the Keras model object from the json data
model = model_from_json(model_structure)

# Re-load the model's trained weights
model.load_weights("model_weights.h5")

# Load an image file to test, resizing it to 32x32 pixels (as required by this model)
img = image.load_img("catdog11.jpg", target_size=(32, 32))

# Convert the image to a numpy array
image_to_test = image.img_to_array(img)

# Add a fourth dimension to the image (since Keras expects a list of images, not a single image)
list_of_images = np.expand_dims(image_to_test, axis=0)

# Make a prediction using the model
results = model.predict(list_of_images)
print("what is in results?: ", results)

# Since we are only testing one image, we only need to check the first result
single_result = results[0]

# We will get a likelihood score for all 10 possible classes. Find out which class had the highest score.


most_likely_class_index = int(np.argmax(single_result))
class_likelihood = single_result[most_likely_class_index]


# Get the name of the most likely class
class_label = class_labels[most_likely_class_index]

# Print the result
print("This is image is a {} - Likelihood: {:2f}".format(class_label, class_likelihood))

это то, что отображается в данный момент

Using TensorFlow backend.
2019-04-15 17:56:05.082617: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:140] 
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2

что в результатах ?: [[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]]

Это изображение собаки - вероятность: 1.000000

Процесс завершен с кодом выхода 0


РЕЗУЛЬТАТ, КОТОРЫЙ Я ХОЧУ ДОСТИГНУТЬ:

CIFAR 10 имеет 10 классов, поэтому при вводе изображения оно должно отображаться, например:

лягушка: 0,4%

грузовик: 0,002%

и т. Д.

1 Ответ

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

Вам просто нужно изменить последнюю строку вывода, которая умножит class_likelihood на процент:

print("This is image is a {} - Likelihood: {}".format(class_label, class_likelihood*100 ) )

Короче, вам просто нужно умножить class_likelihood на 100.

percent = class_likelihood * 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...