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

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

Осталось только выкинуть готовые библиотеки и попробовать на элементарном уровне рассказать про то, как строятся нейронные сети. А то начинается херня, как везде, где питон - берём такую библиотеку, берём сяку библиотеку, и вуаля - смотрите, чего я наделал !

А что там под капотом - покрыто мраком

numpy - это библиотека, которая в этом коде считает линейную алгебру. Зачем самостоятельно реализовывать операции над векторами, которые в формуле одним знаком пишутся?

а что там под капотом у numpy? лапша из кода на древнем фортране, Си и яве. Когда пишешь свой код, да еще применяешь принципы DRY, никакие библиотеки не нужны.

а что там под капотом у numpy?

А какая разница?

лапша из кода на древнем фортране, Си и яве.

Не верю я, что в numpy используется Java. Пруфы есть?

Когда пишешь свой код, да еще применяешь принципы DRY, никакие библиотеки не нужны.

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

Естественно там нативный, максимально оптимизированный код на C. Это как раз позволяет, писать на NumPy быстрый код даже на таком медленном языке как Python. Особенно если вы будете оперировать предоставленными абстракциями, а не спускаться до ручного итерирования элементов.

И питон тоже выкинуть. Настоящие пацаны пишут на ассемблере! А то начинается херня, как везде, и не понятно что там под капотом.

Смешно, но я такие сетки запускал :)

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

Сеть строится постепенно. Сперва образуются устойчивые пути прохождения сигналов. Потом они обрастают изолирующим слоем. А если сеть счастлива, то может выдавать то ли гениальные вещи, то ли бред. Мне бы кармы и двух соавторов...

Можно вопрос не совсем по теме?

Вот тут вот мы видим, как сеть сжимает изображение в одной ей ведомый формат, разжимает, получается что-то похожее (но вместо домика — совершенно другой домик).

А что у нас со сжатием в детерминированный формат? Допустим, какие-то вейвлеты в таком общем их виде, что «просто взять и разложить» не получится. Или векторизация в контуры с заполнением в виде каких-то гармоник. Или фрактальное сжатие. Или всё вместе — фрактальная иерархия контуров, ограничивающих вейвлеты, чтобы окончательно сойти с ума (шутка).

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

Ну да, я так и сказал о_О «Или фрактальное сжатие». Пробовал его кто-то сделать на нейросетке?

Я нагуглил только «We propose use of two different neural network models to implement fractal image compression and decompression», что вызвало у меня ступор — зачем decompression делать тоже на нейросетке, мне решительно непонятно.

Я это вижу как элементарную сеть (одну), у которой на входе растр, на выходе — что-то типа .FIF, а потом декомпрессор разжимает, а обучалка даёт сети по башке соразмерно ошибке.

Плюс куча нюансов, которые я могу излить в песочницу — для комментария это будет слишком «войнаимир».

Ну да, я так и сказал о_О «Или фрактальное сжатие».

Я каким-то образом упустил эту фразу в вашем комментарии.

Пробовал его кто-то сделать на нейросетке?

Мне такого не попадалось.

Мерси боку :) Понял :)

Пробовал его кто-то сделать на нейросетке?

Будучи студентом я делал фрактальную компрессию и декомпрессию. Удавалось с помощью нее сжимать файлы которые уже были пожаты (jpg, zip, gzip). Проблема была в двух моментах:

  • Очень медленно сжимает. Прям хотелось тогда аппаратного ускорения (привет GPU)

  • Патенты. Это уже было, как оказалось, закрыто патентами

А вот объясните как быть, если все нейронки на вход хотят квадратную картинку, скажем до 50К пикселей, а фото объектов в датасете (объект уже обнаружен предыдущей нейронкой) - длинная картинка 700 х 150 пикселов, с мелкими артефактами (не буквами, не символами...) ?
Т.е. тупо масштабировать картинку вниз, теряя артефакты - глупо. И как быть ?

Можно вместо уменьшения наоборот увеличить до 700x700 и заполнить края чем-нибудь нейтральным.
В некоторые виды нейросеток типа свёрточных можно подавать входные изображения разного размера, но к сожалению это сильно зависит используемых от слоёв в сети и ограничений библиотек.

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

Если есть возможность, то делайте свою сетку под 700x150 и обучайте/дообучайте. Веса для сверхточных слоев можно взять из готовой сетки, а остальное дообучить. Практически любая популярная библиотека позволяет работать с любой размерностью изображения. Даже фильтры не обязательно использовать квадратные, можно попробовать, например, прямоугольные, если они подойдут к вашей задаче.

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

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

Есть разные варианты. Например, такие:
- Дополнить картинку до 700х700
- Дообучить на 700х150
- Резать картинку на куски по 150х150

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

Публикации

Истории