Как тренировать мятежные нейроны? - PullRequest
0 голосов
/ 06 апреля 2020

Я тренируюсь по основам c NN поверх набора модных данных MMNIST. Я использую свой собственный код, который не важен. Я использую довольно упрощенный алгоритм, аналогичный ADAM, и формулу cuadrati c (train_value - real_value) ** 2 для обучения и расчета ошибок. Я применяю базовый алгоритм обратного распространения c для каждого веса и анализирую 1/5 весов сети для каждого обучающего изображения. Я использую только слой 128, как в примере с basi c для начинающих в тензорном потоке, плюс входной и выходной слои (последний с softmax и первый, нормализованный до 0-1)

Я не эксперт, и я смог тренировать свою сеть только с точностью до 77% по сравнению с тестовым набором.

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

Не могли бы вы порекомендовать мне некоторые общие методы обучения нейронов-изгоев, не влияя на других?

enter image description here

enter image description here

1 Ответ

1 голос
/ 06 апреля 2020

Вы можете добавить ограничение к данному ядру (матрица весов в плотном слое). С одним из этих ограничений весовые коэффициенты могут быть нормализованы к заданному, определенному пользователем диапазону. См .: TensorFlow.Keras Constraints

Кроме того, вы можете попытаться использовать регуляризаторы, чтобы предотвратить наложение режима, что может указываться некоторыми очень большими (абсолютными) значениями веса. Для этого см., Например, регуляризаторы L1 или L2: TensorFlow.Keras Regularizers

...