Настраиваемая целевая функция для мультиклассовой сети Keras

#neural-network #tensorflow #keras

#нейронная сеть #tensorflow #keras

Вопрос:

Я создаю нейронную сеть, которая будет классифицировать несколько значений bluetooth RSSI по определенным местоположениям.

Например, это нормализованный ввод RSS от нескольких приемников Bluetooth:

 [0.1, 0.6, 0, 0, 0, 0, 0, 0, 0.8, 0.6599999999999999, 0.9, 0.36317567567567566]
  

И это будет результат, классифицирующий его по местоположению:

 [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
  

Это модель:

 # create model
model = Sequential()

# Input layer has 12 inputs and 24 neurons
model.add(Dense(24, input_dim=12, init='normal', activation='relu'))

# Output layer, has 11 outputs
model.add(Dense(11, init='uniform', activation='sigmoid'))

# Compile model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
  

Я обучаю сеть с помощью 3226 обучающих выборок, а затем тестирую ее с помощью 263 дополнительных выборок.

После первых 50 эпох обучающие выборки имеют точность около 85%. Таким образом, точность тестовых выборок составляет около 74%.

Но если я продолжу обучение, точность тестовых выборок фактически снизится. еще 50 периодов тестирования приведут к точности обучающих выборок на 88% и точности тестовых выборок на 62%.

Я пробовал несколько целевых функций, но результат тот же: чем больше я тренируюсь, тем хуже получается.

Может ли это быть связано с функцией потерь, которая, возможно, пытается быть слишком двоичной?

Доступна ли функция потерь, которая положительно вознаградила бы результат, если правильный класс имеет наибольшее значение из всех?

Комментарии:

1. Попробуйте снизить скорость обучения для оптимизатора Adam. Также попытайтесь получить больше данных.