Как вывести название класс в model.predict(x)?
Пытаюсь вывести название класс но получаю только проценты
[[0.5805773]]
Номер класса: [[0.5805773]]
В чем ошибка, подскажите пожалуйста.
Код представлен ниже.
import os
# Каталог с набором данных
data_dir = 'E:\ДЖИПЛОМ\COVID-19_Radiography_Dataset'
# Каталог с данными для обучения
train_dir = 'train'
# Каталог с данными для проверки
val_dir = 'val'
# Каталог с данными для тестирования
test_dir = 'test'
# Часть набора данных для тестирования
test_data_portion = 0.15
# Часть набора данных для проверки
val_data_portion = 0.15
# Количество элементов данных в одном классе
nb_images = 3616
def create_directory(dir_name):
if os.path.exists(dir_name):
shutil.rmtree(dir_name)
os.makedirs(dir_name)
os.makedirs(os.path.join(dir_name, "Normal"))
os.makedirs(os.path.join(dir_name, "COVID"))
create_directory(train_dir)
create_directory(val_dir)
create_directory(test_dir)
def copy_images(start_index, end_index, source_dir, dest_dir):
for i in range(start_index, end_index):
shutil.copy2(os.path.join(source_dir, "Normal-" + str(i) + ".png"),
os.path.join(dest_dir, "Normal"))
shutil.copy2(os.path.join(source_dir, "COVID-" + str(i) + ".png"),
os.path.join(dest_dir, "COVID"))
start_val_data_idx = int(nb_images * (1 - val_data_portion - test_data_portion))
start_test_data_idx = int(nb_images * (1 - test_data_portion))
print(start_val_data_idx)
print(start_test_data_idx)
copy_images(0, start_val_data_idx, data_dir, train_dir)
copy_images(start_val_data_idx, start_test_data_idx, data_dir, val_dir)
copy_images(start_test_data_idx, nb_images, data_dir, test_dir)
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Conv2D, MaxPooling2D
from tensorflow.python.keras.layers import Activation, Dropout, Flatten, Dense
from sklearn.metrics import f1_score
import tensorflow.compat.v2 as tf
import tensorflow as tf
from tensorflow import keras
import numpy as np
import argparse
import pickle
import cv2
import matplotlib.pyplot as plt
from tensorflow.keras.preprocessing import image
from IPython.display import Image
from tensorflow.keras.preprocessing import image
import matplotlib.pyplot as plt
import numpy as np
# Каталог с данными для обучения
train_dir = 'train'
# Каталог с данными для проверки
val_dir = 'val'
# Каталог с данными для тестирования
test_dir = 'test'
# Размеры изображения
img_width, img_height = 299, 299
# Размерность тензора на основе изображения для входных данных в нейронную сеть
# backend Tensorflow, channels_last
input_shape = (img_width, img_height, 3)
# Количество эпох
epochs = 30
# Размер мини-выборки
batch_size = 16
# Количество изображений для обучения
nb_train_samples = 5062
# Количество изображений для проверки
nb_validation_samples = 1084
# Количество изображений для тестирования
nb_test_samples = 1084
classes = ['Normal', 'COVID']
classes = train_generator.class_indices
>>> print(classes)
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (5, 5)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (7, 7)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=[tf.keras.metrics.Recall()])
datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = datagen.flow_from_directory(
train_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
val_generator = datagen.flow_from_directory(
val_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
test_generator = datagen.flow_from_directory(
test_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs,
validation_data=val_generator,
validation_steps=nb_validation_samples // batch_size)
img_path = 'Ковид.jpg'
img = image.load_img(img_path, target_size=(img_width, img_height, 3))
# Преобразуем картинку в массив
x = image.img_to_array(img)
# Меняем форму массива в плоский вектор
x = x.reshape(img_width, img_height, 3)
# Инвертируем изображение
x = 255 - x
# Нормализуем изображение
x /= 255
x = np.expand_dims(x, axis=0)
prediction = model.predict(x)
print(prediction)
print("Номер класса:", prediction)
x = np.array(prediction)[indices.astype(int)]
print("Название класса:", classes[x])
scores = model.evaluate_generator(test_generator, nb_test_samples // batch_size)
print("Аккуратность на тестовых данных: %.2f%%" % (scores[1]*100))```