2016-12-03 1 views
1

Я построил систему, в которой нейронная сеть может изменять размер (количество и размер скрытых слоев и т. Д.). При обучении с уровнем обучения 0,5, 1 скрытым слоем из 4 нейронов, 2 входами и 1 выходом, он успешно изучает проблему XOR и AND (двоичные входы и т. Д.). Работает очень хорошо.Как определить проблему с нейронными сетями

Когда я затем создаю входы структуры 784, 1 скрытый слой из 30 нейронов и 10 выходов и применяю набор цифр MNIST, где каждый вход является значением пикселя, я просто не могу получить хорошие результаты (не лучше, чем случайные !). Мой вопрос основан на теории: если мой код действительно работает с другими проблемами, я должен предположить, что мне нужно продолжать экспериментировать с разными уровнями обучения, скрытыми слоями и т. Д. Для этого? Или нужно решить, что это более основная проблема?

Как найти правильную комбинацию слоев, скорость обучения и т. Д.? Как бы вы это сделали?

Тестирование также трудно, как это занимает около 2 часов, чтобы добраться до точки, где он должен был узнать ... (на макинтош)

Нет, я не использую TensorFlow или другие библиотеки, потому что я я бросаю вызов себе. В любом случае, он работает ... до предела!

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

ответ

0

Быстрое консультирование может заключаться в решении промежуточной задачи (например, для использования собственных 5x5 ASCII «изображений» цифр), чтобы иметь больше нейронов на скрытом уровне, чтобы уменьшить набор данных для более быстрого моделирования, сравнить ваши реализации для других пользовательских реализаций на вашем языке программирования.

0

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

В целом, скорость обучения не должна сохраняться на начальном этапе когда весовые коэффициенты сети являются случайными, и хорошей практикой является снижение скорости обучения в течение периода обучения. Вычисление значений функции потери или ошибки w.r.t итераций обучения даст вам хорошее представление об этом. Если скорость обучения очень высока, потеря будет колебаться и сильно варьироваться. Если скорость обучения очень мала, потеря будет очень медленно уменьшаться с помощью итераций обучения. Если вам интересно, читайте об этом в курсе Эндрю Нг или в каком-то блоге.

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

После экспериментов с небольшими проблемами вы можете попробовать одно и то же с некоторыми фреймворками, скажем, Tensorflow, после чего вы можете попробовать более сложные проблемы.

Смежные вопросы