#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. Также попытайтесь получить больше данных.