Сверточная нейронная сеть для определения ключевых точек Keras Python
Пытаюсь обучить сверточную нейронную сеть обучаться классифицировать один объект на изображении (220, 220). Всего классов два - собака и кошка. Для обучения имеется 3385 'jpg' картинок. Также есть информация о классе каждого изображения (1 или 0) и о двух координатах (от 0.0 до 1.0) углов прямоугольника вокруг объекта (0.0 для левых, а также для верхних углов изображения и 1.0 - для правых и для нижних углов изображения). Сверточная сеть должна иметь 5 выходов (1 выход для классов и четыре выхода для координат двух углов прямоугольника x1,y1,x2,y2). Для тренировочных выделил 3047 'x_train' с формой (3047, 220, 220, 3) и для маркеров 'y_train' с формой (3047, 5). Также 338 тестовых изображений 'x_test' с формой (338, 220, 220, 3) тестовые маркеры 'y_test'. Например, y_test[0] элементы array([1. , 0.555 , 0.18 , 0.70833333, 0.395 ]). Но prediction[0] имеет значения 'array([335.62802 , 68.358444, 36.427483, 166.9188 , 139.5223 ],dtype=float32)'. У prediction форма (338, 5). Во время обучения значения ' loss: 11.5947 - accuracy: 0.1250' изменяются до 'loss: 4.4767 - accuracy: 1.0000'. Кто-нибудь может подсказать что делаю неверно.
#Summary:
#Model: "sequential_1"
#conv2d_2 (Conv2D) (None, 220, 220, 32) 896
#max_pooling2d_2 (MaxPooling2 (None, 110, 110, 32) 0
#conv2d_3 (Conv2D) (None, 110, 110, 64) 18496
#max_pooling2d_3 (MaxPooling2 (None, 55, 55, 64) 0
#flatten_1 (Flatten) (None, 193600) 0
#dense_2 (Dense) (None, 128) 24780928
#dense_3 (Dense) (None, 5) 645
#Total params: 24,800,965
#Trainable params: 24,800,965
#Non-trainable params: 0
import os
import cv2
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import numpy as np
import matplotlib.pyplot as plt
from tensorflow import keras
from tensorflow.keras.layers import Dense, Flatten, Dropout, Conv2D, MaxPooling2D
import time
model = keras.Sequential([
Conv2D(32, (3, 3), padding='same', activation='relu', input_shape=(220, 220, 3)),
MaxPooling2D((2, 2), strides=2),
Conv2D(64, (3, 3), padding='same', activation='relu'),
MaxPooling2D((2, 2), strides=2),
Flatten(),
Dense(128, activation='relu'),
Dense(5, activation='relu')
])
print(model.summary())
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
his = model.fit(x_train, y_train, batch_size=32, epochs=2, validation_split=0.5)
model.evaluate(x_test, y_test)
prediction = model.predict(x_test)