Доброго времени суток, есть модель:
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation="relu", input_shape=(218, 178, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation="relu"))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation="relu"))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation="relu"))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation="relu"))
model.add(layers.Dense(4, activation="sigmoid"))
model.compile(optimizer="rmsprop", loss="mse")
Тренируется она следующим образом:
train_dir = "../path/to/train/images"
images= []
coordinates = []
with open("../path/images_boxes.csv") as file:
for ii, i in enumerate(file.readlines()[1:2001]):
if ii % 100 == 0:
print("=====Creating", ii, "images=====")
info = i.replace("\n", "").split(",")
# где i представляет собой следующее:
# 000001.jpg,95,71,226,313
# то есть структура такая:
# image_id,x_1,y_1,width,height
images.append(img_to_array(load_img(os.path.join(train_dir, info[0]))))
# где train_dir/info[n] представляет собой путь до изображения
coordinates.append([point for point in info[1:]])
images= np.array(images, dtype="float32") / 255.0
coordinates = np.array(coordinates, dtype="float32")
train_images, test_images = images[:1500], images[1500:]
train_coordinates, test_coordinates = coordinates[:1500], coordinates[1500:]
model.fit(train_images, train_coordinates, validation_data=(test_images, test_coordinates), batch_size=20, epochs=5, verbose=1)
model.save("model.h5")
Проблема собственно в чём:
loss: 75572.7324, модель явно настроена или собрана неправильно, на выходе, model.predict выдает вместо каких-то логичных значений координат ограничивающего прямоугольника сплошные единицы
Прошу подсказать, где я ошибся и что в своей моделе мне поменять?