Вывод вероятности распознавания изображений класса Keras 3?

#python #tensorflow #keras

#python #тензорный поток #keras

Вопрос:

Я пытаюсь заставить свою модель выводить вероятности прогнозируемого класса, однако вместо этого моя модель выводит данные с горячим кодированием.

Я использую пользовательский набор данных, который я создал с помощью различных дополнений к изображениям, в результате чего получается 3 класса по 1000 изображений в каждом, помеченных X, Y и Z. Я использовал метод pickle для хранения моего набора данных.

Это код, который я использовал для обучения.

 # Opening the files about data
X = pickle.load(open("X.pickle", "rb"))
y = pickle.load(open("y.pickle", "rb"))

# normalizing data (a pixel goes from 0 to 255)
X = X / 255.0

# one-hot encode target column
y = to_categorical(y)

# Building the model
model = Sequential()

model.add(Conv2D(64, kernel_size=3, activation='relu', input_shape=X.shape[1:]))
model.add(Conv2D(32, kernel_size=3, activation='relu'))
model.add(Flatten())
model.add(Dense(3, activation='softmax'))

#compile model using accuracy to measure model performance
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

#train the model
model.fit(X, y, validation_split=0.1, epochs=3)

model.save('IR_final.model')
  

Насколько я понимаю, использование softmax и categorical_crossentropy подходит для того, чего я пытаюсь достичь, но результат не соответствует ожиданиям.

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

 CATEGORIES = ["X", "Y", "Z"]

dir = "./model_path"
model = tf.keras.models.load_model(dir)

for i in range(1,4):
    image = f"'./image_path/{i}.jpg"

    IMG_SIZE = 50

    img_array = cv2.imread(image)
    new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
    new_array = new_array.reshape(-1, IMG_SIZE, IMG_SIZE, 1)

    pred = model.predict(new_array)
    print(pred)
  

В этом случае я хотел бы, чтобы мой вывод был чем-то

 [0.1231, 0.1123, 0.7543] 
  

вместо этого я получаю

 [[0. 1. 0.]
 [0. 1. 0.]
 [0. 1. 0.]]
  

спасибо за ваше время и любые предоставленные советы / предложения.

Комментарии:

1. кажется, что ваша модель всегда предсказывает один класс с вероятностью, равной 1

2. @Marco Cerliani да, сэр, похоже, что так, у вас есть какие-либо предложения, которые могли бы помочь мне получить вывод вероятности? оцените затраченное время