#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 да, сэр, похоже, что так, у вас есть какие-либо предложения, которые могли бы помочь мне получить вывод вероятности? оцените затраченное время