Comments 15
Респект за реализацию с нуля - это как раз то чего не хватает. Практически во всех туториалах привыкли юзать pytorch или tensorflow без объяснения как нейросети устроены изнутри и это печально.
Надо побольше подобного рода статей.
Вот тут посмотрите: https://programforyou.ru/poleznoe/convolutional-network-from-scratch-part-zero-introduction
Но только это на CPU. Чтобы на GPU перенести вам понадобится заиметь оптимизированное (блочное с кэшированием) умножение тензоров, потому как обычное распараллеленное умножение "в лоб" работает на порядок медленнее этого самого оптимизированного. А потом научиться делать свёртки с помощью этого самого умножения.
Вот так: https://da-nie.livejournal.com/6864.html
Поскольку до выкладывания на github моя сеть ещё не доросла, то вот вам она в архиве.
Там в папке cuda/netmodel как раз три сети — сортировщик, основа GAN и сама GAN. Увы, шаги свёртки и обратной свёртки допустимы в слоях только 1 (сама же функция для свёртки работает с любым шагом). Причина в обратной свёртке — там шаг трактуется в пространстве выходного тензора и вот с этим у меня пока проблема. А так как в обучении они парно связаны (туда<->обратно), то отсюда и следует запрет на шаг, отличный от 1.
Спасибо за полезные ссылки. Честно говоря, я сам хочу сделать большую (лонгрид) статью/курс на хабре по реализации ml-алгоритмов с нуля т.к. те, что есть в интернете, либо неправильные либо неполные.
Хорошо, что есть люди вроде вас, которые бесплатно помогают другим.
Да, спасибо, после завершения цикла статей про эту реализацию(работающую только на одном ядре процессора), я собираюсь сделать несколько статей про переход к более оптимизированным вариантам
Эх, коллега. Всё наоборот. Не должно быть никакого респекта за "реализацию с нуля до 0,1". Количество статей дилетантского уровня "давайте сделаем первый шажок в программирование - включим компьютер вместе, а дальше и я сам не знаю" настолько зашкаливает в Сети, что поощрять такое просто недопустимо.
Вот если бы человек разобрался, к примеру, как свёрточные ядра обучаются и с нуля написал код с примерами, а затем описал бы всё в подробном туториале - тогда была бы "респект и уважуха".
Да и ничего на самом-то деле в статье не раскрывается...
P.S. Надеюсь автор её понимает, что в данном случае - "ничего личного, просто трезвая оценка положения в инфорпространстве и представленного материала".
"С нуля" есть прекрасная пара статей, довольно старая, но ни капли не устаревшая:
https://habr.com/ru/articles/312450/ и https://habr.com/ru/articles/313216/
Там прекрасно описаны основы, как и из чего состоят нейронные сети, и дают прекрасный фундамент для собственноного дальнейшего эксперементирования.
"Побольше статей" - спорное утверждение, ибо, "для начинающих" там много не напишешь, а если все сейчас ринутся писать, то это будет туева хуча однотипных статей, и, хоть и полезность одной такой статьи будет неплохой, но суммарная полезность всех таких статей не вырастет ни капли.
Крутой материал , спасибо !
Многие скажут, что бесполезно вникать в нюансы, когда есть готовые решения, но когда-то сам пытался реализовать на плюсах простейшую нейросеть без использования готовых библиотек, и это огромное удовольствие, когда твой флаппи бёрд после десятка глупых прыжков начинает набирать по полторы тысячи очков за игровую сессию. А подобные статьи как раз помогают "разжевать" тему, вместо того, чтоб объяснить какие две строчки прописать, чтоб "создать" свою нейросеть.
Упс AttributeError: 'NeuralNetwork' object has no attribute 'plot_weights_graph'
Маленькая парвка:
на выходом = на выходе?
Или на выходном слое?
Простая нейронная сеть без библиотек и матриц. Обучение с учителем