Как стать автором
Обновить

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

я так и не понял, примеры что делают?
а сеть для чего?
Примеры показывают как создать сеть, создать обучающую выборку и как включить обучение.
Какую задачу захотите решить, для того сеть и будет. На MNIST учат сеть распознавать числа на картинках, а можно с помощью нейронки решать другие задачи.
Не используя BLAS для матричных умножений (для CPU выбор досточно обширен — OpenBLAS, BLIS, ATLAS, ACML, MKL, или что-то более высокоуровневое, типа Eigen), вы мгновенно теряете в производительности, причем достаточно много. Если мне не изменяет память, на процессорах семейства Haswell, 18 ядер, MNIST на плоских полносвязанных сетках тренируется за несколько десятков секунд до ~98% (с учетом того, что бейзлайн в 90% с логистической регрессией достигается за секунды).
А в целом, тот стиль архитектуры, который вы используете (в частности, выделение понятия нейрона в отдельный класс), был популярен лет 15 назад. Сейчас используют векторизированные представления/вычисления.
Хотел реализовать сеть без внешних зависимостей.
Буду переписывать архитектуру, переходить к матричному подходу.
Нейронные сети «замечательны», «прекрасны» и…!!! Так думают примерно все, кто не понимает их технологию. А когда вникнешь — это обыденность.
Прочитав статью, я сначала не понял чему посвящён проект. Но, встретив упоминание MNIST, всё стало ясно (не кластеризация, не аппроксимация, а просто распознавание буковок-циферок-картинок). Очень рад что вы выбрали сигмойду (есть ещё тангенсойда и прочие -ойды). И все они из рубрики «логистическая регрессия». А есть что-то ещё?! — Есть! Но среди «специалистов по ИИ» принято «крысить» информацию и заниматься лишь «хиханьками-хаханьками» над теми, кто ещё «не в теме». Я не стану отступать от этого «уже сложившегося» «прекрасного» правила, но от себя скажу, что достаточно найти один полный и толковый курс по «машин лёрнингу» (да-да, так щас модно называть ИИ), чтобы сначала долго материть тех, кто наводит на эту тему туман, давая лишь кусочки информации, из которых очень тяжело собрать целостную картину, а затем просто оставить эту тему как пройденный этап, инструмент, имеющий свою область применимости, но никак не магическое средство «от всего», как это преподносится, ой, да где только это не преподносится…

Если не сложно, то можете дать ссылку на толковый курс или книгу? Желательно на русском.

Николенко, Кадурин, Архангельская «Глубокое обучение» — очень внятно и исчерпывающе все базовые знания о НС
Но среди «специалистов по ИИ» принято «крысить» информацию и заниматься лишь «хиханьками-хаханьками» над теми, кто ещё «не в теме».

Это точно. Вы прям мой опыт общения с ними описали.
Поиграться — это запустить готовый тест. А у вас test — пустой файл.
Не получилось поиграться…
Нет желания переписать на матрицы, и посмотреть, как сильно возрастет скорость работы? :-)
Приведу ссылку на свой комментарий к похожей статье, он актуален и для этой: habr.com/ru/post/440162/#comment_19765270
Но тут автор уже до OpenMP дошел :-)
Да, честно, я осознал устаревший вариант своей архитектуры. Буду переписывать на матрицы.

Начальные веса выбираются случайно? Приведенная точность указана для обучающей выборки или выполнялась валидация для данных, которые нейросеть еще «не видела» (unseen data)?

Очень правильные вопросы :)
Начальные веса выбираются случайно.
Речь идёт об unseen data. В настройках сети я могу указать, размер контрольной выборки.
используем оптимизацию Адама
С оптимизацией Адама ...

Первый раз вижу, чтобы фраза "adaptive moment estimation" переводилась как "оптимизация Адама".

Интересный велосипед.

По глазам резануло что у вас есть отдельно обучение и оптимизация. По моему обычно оптимизации никто не выделяет, просто есть алгоритмы разные, и SGD один из них (кстати SGD это не обычный градиентный спуск как у вас сказано в Wiki, а стохастический).

Интересно было бы услышать насколько эффективна смена алгоритма оптимизации в процессе обучения и особенно про мутации. Как-то эти подходы сильно отличаются от классики которую дают во всех учебниках.
1) Это не просто велосипед, это велосипед с квадратными колёсами.
2) В статье которую я прочёл, Адам шёл как улучшенная версия SGD, потому и оптимизация Адама.
3) Адам заметно ускоряет процесс обучения, перепрыгивая локальные минимумы. SGD очень медленный. Нестеров обучает быстрее чем SGD, но застревает в локальных минимумах.
Поздравляю с созданием хобби проэкта!!!
Сам баловался таким только на Нампи. В принципе твой проэкт состоит из напми функционала и врепера для нейронки.
Дружественная критика:

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

Вот такой бред я никогда не слышал и в голову бы не пришло так делать

nn = foxnn.neural_network([3, 5, 4, 2])

слишком специализированый код. В перспективе следует дать пользователю конструировать граф с выключением/включением обучения слоёв и отдельной скорости обучения для каждого слоя, выделить как классы обратный распостранитель градиента, оптимизатор, трейнер, сейвер сети и трейнера, визуализатор картинки, опции проэкта.

Основным преимуществом моей библиотеки является создание сети одной строчкой кода.

не ставь на это как на основное преимуществом.
thelp.to_seq(image_size,image_size //2,'tanh', 100, 'tanh', code_size,'tanh', 11, 'softmax').to(device)
У меня для мниста. мой врепер правда просто для pytorch.

подозрительно долго и некачественно обучается.бери Adam s lr 1e-4, если есть регуляризация то где то в 10 раз меньше. В конце должен быть софтмакс с BCELoss, что даёт просто линейную разницу, а так ты наверно градиент от сигмоиды считаешь а это не совсем
stepik.org/lesson/204987/step/1?unit=178762
правильно.
Рекомендую курс.

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

Ставь на приимущество- б'ольшая скорость и функционал которого у других нету. Могу по секрету посоветовать что. Могу вообще поучаствовать, по приколу писал штраффен- виноград оптимизацию, оптимизацию конво, всё хочу такалякать чтоб на CUDA шёл без дурных багов как популярные платформы.

самый большой недостаток это
Нет GPU ускорения

слишком специализированый код.

проверял точное численное соответствие с известной платтформой, tensorflow или pytorch?


Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории