@mrolivka

Как правильно спроектировать нейронную сеть?

Приветствую. Уже некоторое время плотно интересуюсь машинным обучением, нейронными сетями и всем тем, что с этим связанно, для выполнения задач мультиклассификации и регрессии. Имеются следующие условия:
1. Датасет в котором содержится входные данные для мультиклассификации и регрессии, причем классификация должна происходить на данных полученных после выполнения регрессии и при этом учитывать прошлый "опыт".
2. Ввод данных, по которым нейронная сеть должна выполнить регрессию и мультиклассификацию, и возвращать вычисленные значения. Классификация формата a<-b<-c где a - класс=-1, b - класс=0, с - класс=1.
Примерное представление топологии нейронной сети. Звездочками отмечены основные значения(x1,x2,x1_nn,x2_nn) на основе которых должна происходить мультиклассификация(x6,x6_nn):
Изображение топологии
5bb3ebcbebfd9265695576.jpeg
Желательные функции, но необязательные на данном этапе:
1. Самообучение, основанное на разнице между прогнозируемыми(xn_nn) и фактическими значениями(xn).
2. Добавление входных данных как отдельной ветки (xn) для улучшения результатов прогнозирования.
Основой язык С++. Слышал про R, но с ним не знаком. Python можно вроде как использовать через костыли (ZeroMq), но в самих костылях еще не разобрался. В идеале обученная нейросеть подключается через .dll, вызывается функция, происходит расчет, и так до следующего вызова. В машинном обучении я недавно, поэтому возможны ошибки как и в представлении, так и в поставленных задачах.
Хочется понять, возможно ли это сделать, как организовать всё правильно, с хорошей производительностью и желательно простой реализацией=) Какая топология лучше подходит под приведенные задачи? Какие библиотеки, пакеты использовать (смотрю в сторону CatBoost от Яндекса, но там тоже не все так просто)? Книги, туторы, статьи, видео, всё что может быть полезно готов изучить вдоль и поперёк, только скажите где(много информации уже перерыл). Спасибо, что дочитали до конца.
  • Вопрос задан
  • 857 просмотров
Решения вопроса 1
@ivodopyanov
NLP, python, numpy, tensorflow
1. Классификация и регрессия - это разные задачи. В принципе, можно организовать так, как вы описали, но в этом случае результаты регрессии будут эдаким бутылочным горлышком для классификации. Зачем ограничивать объем доступной информации для классификатора?
2. Топология сети обычно сильно сложнее, чем один скрытый слой, как изображено у вас на картинке и зависит от характера входных данных. Являются ли данные последовательностью или разовым "снимком" состояния среды? Однородны ли они или приходят из разных источников? И так далее. Проще просто по постановке задачи подсказать.
3. Python проще использовать для машинного обучения. CatBoost - это библиотека для градиентного бустинга (совсем другой алгоритм и другая архитектура, нежели нейронные сети). На Python одна из самых удобных и простых библиотек для обучения нейронных сетей - это keras. Есть еще sklearn, где реализовано несколько других, более "простых" алгоритмов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dmshar
Я так и не понял, в чем-же вопрос.
Если "как это сделать" - при том, что "это" - практически весь курс по ML и
DL - то искать ответ на форуме при наличии просто океана ресурсов в сети - как то странновато.
Если как это сделать на С++" - то тоже вроде недостатка информации нет.
Книги, туторы, статьи, видео, всё что может быть полезно готов изучить вдоль и поперёк, только скажите где(много информации уже перерыл)

Что, действительно? Как это вам удалось - ничего не найти.
Ну так, для затравки, может поможет:

https://www.amazon.com/C-Machine-Learning/dp/1786468409
https://www.oreilly.com/library/view/machine-learn..."
"https://www.amazon.com/Deep-Belief-Nets-CUDA-Feedf..."
https://www.amazon.com/Data-Mining-Algorithms-Patt..."
https://habr.com/post/335838/
www.mlpack.org
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы