Сверточная нейронная сеть для определения ключевых точек 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)

Ответы (0 шт):