Как мне отформатировать мои цели для обучения модели Keras CNN? - PullRequest
0 голосов
/ 27 апреля 2018

Мой набор данных - это изображения китов. Я пытаюсь обучить CNN, который может найти 2 точки кита на данном изображении. Мои тренировочные функции - это изображение в массиве, а цели - координаты x и y 2 точек на изображении (2 точки на ките).

Каков наилучший способ создания нейронной сети с помощью Keras, которая может извлечь уроки из имеющегося у меня набора данных, чтобы он мог найти эти точки на новых немаркированных изображениях?

Моя главная проблема на данный момент - выяснить, как отформатировать цель (2 точки на изображении), чтобы моя модель Keras могла понимать / читать данные.

Неверный код, который у меня есть:

x_train = np.array([cv2.imread("1small.jpg")])
y_train = np.array([14.1, 13.5, 16.3, 14.1])

x_test = np.array([cv2.imread("0small.jpg")])
y_test = np.array([11.8, 10.8, 17.0, 16.0]) # fake data just to test

model = Sequential()
model.add(Dense(1,32,32,3))
model.add(Activation('tanh'))
model.add(Dense(1))
model.compile(loss='mean_absolute_error', optimizer='rmsprop')

model.fit(x_train, y_train, nb_epoch=1, batch_size=1)

prediction = model.predict(x_test)
print prediction

1 Ответ

0 голосов
/ 27 апреля 2018

Эти сети довольно хороши для изучения координат, поэтому вы можете оставить данные в виде четырех координат. Затем вы можете определить свою потерю как сумму расстояний в квадрате. Первым приятным моментом является то, что он будет наказывать большие ошибки гораздо больше, а мелкие - меньше, так что это даст сети плавный переход к совершенству. :) Вторым приятным моментом является то, что, если подумать, квадрат расстояния между двумя точками является суммой квадратов разностей координат. Таким образом, вы можете использовать среднеквадратичную ошибку в массиве координат как потерю для этой сети. Красиво и просто.

Глядя на свою сеть, вы должны добавить несколько сверток и объединить слои впереди, плотные слои не подходят для первого просмотра изображения. Они должны быть в верхней части сети.

Также, tanh активация - это последнее десятилетие. :) Используйте relu, за исключением последнего слоя, который не должен иметь активации.

Также подумайте о преобразовании ваших координат, чтобы середина изображения была источником, а края были около -1 и 1. Это немного нормализует пространство предсказания, может помочь.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...