Pull to refresh
  • by relevance
  • by date
  • by rating

Нейронные сети на Javascript

JavaScript *Node.JS *Canvas *Big Data *Machine learning *
image
Идея для написания этой статьи возникла прошлым летом, когда я слушал доклад на конференции BigData по нейронным сетям. Лектор «посыпал» слушателей непривычными словечками «нейрон», «обучающая выборка», «тренировать модель»… «Ничего не понял — пора в менеджеры», — подумал я. Но недавно тема нейронных сетей все же коснулась моей работы и я решил на простом примере показать, как использовать этот инструмент на языке JavaScript.

Мы создадим нейронную сеть, с помощью которой будем распознавать ручное написание цифры от 0 до 9. Рабочий пример займет несколько строк. Код будет понятен даже тем программистам, которые не имели дело с нейронными сетями ранее. Как это все работает, можно будет посмотреть прямо в браузере.
Читать дальше →
Total votes 58: ↑54 and ↓4 +50
Views 140K
Comments 79

Автоэнкодеры в Keras, Часть 3: Вариационные автоэнкодеры (VAE)

Python *Algorithms *Image processing *Mathematics *Machine learning *
Tutorial

Содержание



В прошлой части мы уже обсуждали, что такое скрытые переменные, взглянули на их распределение, а также поняли, что из распределения скрытых переменных в обычных автоэнкодерах сложно генерировать новые объекты. Для того чтобы можно было генерировать новые объекты, пространство скрытых переменных (latent variables) должно быть предсказуемым.

Вариационные автоэнкодеры (Variational Autoencoders) — это автоэнкодеры, которые учатся отображать объекты в заданное скрытое пространство и, соответственно, сэмплить из него. Поэтому вариационные автоэнкодеры относят также к семейству генеративных моделей.


Читать дальше →
Total votes 48: ↑47 and ↓1 +46
Views 35K
Comments 15

Автоэнкодеры в Keras, Часть 4: Conditional VAE

Python *Algorithms *Image processing *Mathematics *Machine learning *
Tutorial

Содержание



В прошлой части мы познакомились с вариационными автоэнкодерами (VAE), реализовали такой на keras, а также поняли, как с его помощью генерировать изображения. Получившаяся модель, однако, обладала некоторыми недостатками:

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

    Что тут писать, вот так выглядели сгенерированные цифры:

    Картинка


  2. Сложно было генерировать картинку какой-то заданной цифры. Для этого надо было смотреть, в какую область латентного пространства попадали изображения конкретной цифры, и сэмплить уже откуда-то оттуда, а тем более было сложно генерировать цифру в каком-то заданном стиле.

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


Читать дальше →
Total votes 29: ↑29 and ↓0 +29
Views 16K
Comments 12

Автоэнкодеры в Keras, Часть 5: GAN(Generative Adversarial Networks) и tensorflow

Python *Algorithms *Image processing *Mathematics *Machine learning *
Tutorial

Содержание



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

При всех преимуществах вариационных автоэнкодеров VAE, которыми мы занимались в предыдущих постах, они обладают одним существенным недостатком: из-за плохого способа сравнения оригинальных и восстановленных объектов, сгенерированные ими объекты хоть и похожи на объекты из обучающей выборки, но легко от них отличимы (например, размыты).

Этот недостаток в куда меньшей степени проявляется у другого подхода, а именно у генеративных состязающихся сетейGAN’ов.

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

Коротко о GAN


GAN’ы впервые были предложены в статье [1, Generative Adversarial Nets, Goodfellow et al, 2014] и сейчас очень активно исследуются. Наиболее state-of-the-art генеративные модели так или иначе используют adversarial.

Схема GAN:



Читать дальше →
Total votes 25: ↑25 and ↓0 +25
Views 24K
Comments 9

Автоэнкодеры в Keras, часть 6: VAE + GAN

Python *Algorithms *Image processing *Mathematics *Machine learning *
Tutorial

Содержание



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

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

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

Подход, который будет описан далее, основан на статье [Autoencoding beyond pixels using a learned similarity metric, Larsen et al, 2016].



Иллюстрация из [1]
Читать дальше →
Total votes 37: ↑37 and ↓0 +37
Views 16K
Comments 7

Swift и TensorFlow

Swift *Machine learning *TensorFlow *
Я не люблю читать статьи, сразу иду на GitHub

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


Рассказывать о том, что такое машинное обучение и искусственный интеллект, в 2017 году наверное нет необходимости. На эту тему уже написано большое количество как публицистических статей, так и серьезных научных работ. Поэтому предполагается, что читатель уже знает, что это такое. Говоря о машинном обучении, сообщество data scientist и software engineers, как правило подразумевает глубокие нейронные сети, которые приобрели большую популярность по причине своей производительности. На сегодняшний день в мире существует большое количество различных программных решений и комплексов для решения задачи искусственных нейронных сетей: Caffe, TensorFlow, Torch, Theano(rip), cuDNN etc.

Swift


Swift — инновационный, protocol — oriented, open source язык программирования, выращенный в стенах компании Apple Крисом Латнером (недавно покинувшим компанию Apple, после SpaceX и обосновавшимся в Google).
В Apple’s OSs уже были различные библиотеки для работы с матрицами и векторной алгеброй: BLAS, BNNS, DSP, впоследствии объединенные под крышей одной библиотеки Accelerate.
В 2015 появились небольшие решения для реализации математики на основе графической технологии Metal.
В 2016 появился CoreML:
image
CoreML способен импортировать готовую, натренированную модель (CaffeV1, Keras, scikit-learn) и далее предоставить разработчику возможность экспортировать ее в приложение.
То есть, вам необходимо: Собрать модель на другой платформе, на языке Python или C++, используя сторонние фреймворки. Далее обучить ее на стороннем аппаратном решении.
И только после этого вы можете импортировать и работать на языке Swift. На мой взгляд очень нагромождено и сложно.
Читать дальше →
Total votes 12: ↑11 and ↓1 +10
Views 11K
Comments 8

Много иероглифов – много нейросетей: как построить эффективную систему распознавания для большого числа классов?

ABBYY corporate blog Machine learning *Artificial Intelligence
В прошлых статьях уже писали о том, как у нас устроены технологии распознавания текста:


Примерно так же до 2018 года было устроено распознавание японских и китайских символов: в первую очередь с использованием растровых и признаковых классификаторов. Но с распознаванием иероглифов есть свои трудности:

  1. Огромное количество классов, которое нужно различать.
  2. Более сложное устройство символа в целом.

image

Сказать однозначно, сколько символов насчитывает китайская письменность, так же сложно, как точно посчитать, сколько слов в русском языке. Но наиболее часто в китайской письменности используются ~10 000 символов. Ими мы и ограничили число классов, используемых при распознавании.

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

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

Мы стали исследовать применимость свёрточных нейронных сетей, чтобы поднять как качество, так и скорость распознавания иероглифов. Хотелось заменить весь блок распознавания отдельного символа для этих языков с помощью нейронных сетей. В этой статье мы расскажем, как нам в итоге это удалось.
Читать дальше →
Total votes 29: ↑29 and ↓0 +29
Views 6.1K
Comments 11

Как задача из классического сбора данных перешла в решение простенькой задачи MNIST. Или как я спарсил сайт ЦИК

Python *Machine learning *TensorFlow *
Sandbox
В один из будничных дней, под вечер, от моего начальника прилетела интересная задачка. Прилетает ссылка с текстом: «хочу отсюда получить все, но есть нюанс». Через 2 часа расскажешь, какие есть мысли по решению задачи. Время 16:00.

Как раз об этом нюансе и будет эта статья.

Я как обычно запускаю selenium, и после первого перехода по ссылке, где лежит искомая таблица с результатами выборов Республики Татарстан, вылетает оно

image

Как вы поняли, нюанс заключается в том, что после каждого перехода по ссылке появляется капча.

Проанализировав структуру сайта, было выяснено, что количество ссылок достигает порядка 30 тысяч.

Мне ничего не оставалось делать, как поискать на просторах интернета способы распознавания капчи. Нашел один сервис

+ Капчу распознают 100%, так же, как человек
— Среднее время распознавания 9 сек, что очень долго, так как у нас порядка 30 тысяч различных ссылок, по которым нам надо перейти и распознать капчу.

Я сразу же отказался от этой идеи. После нескольких попыток получить капчу, заметил, что она особо не меняется, все те же черные цифры на зеленом фоне.

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

На часах уже было 17:00, и я начал искать предобученные модели по распознаванию чисел. После проверки их на данной капче точность меня не удовлетворила — ну что ж, пора собирать картинки и обучать свою нейросетку.

Для начала нужно собрать обучающую выборку.

Открываю вебдрайвер Хрома и скриню 1000 капчей себе в папку.
Читать дальше →
Total votes 25: ↑23 and ↓2 +21
Views 6.6K
Comments 31

Семплинг поперек или как выжать из датасета еще несколько тысячных

Data Mining *Image processing *Artificial Intelligence
Recovery mode
Эта статья про картинки и классификацию. Небольшое исследование свойств, такой вот штрих к портрету MNIST (ну и подсказка в решении других подобных задач).

В сети есть множество публикаций об интерпретации той или иной нейронной сети и значимости и вкладе тех или иных точек в обучение. Есть масса работ про поиск усов, хвостов и других частей и их важности и значимости. Не буду сейчас подменять библиотекарей и составлять список. Просто расскажу о своем эксперименте.
Читать дальше →
Total votes 4: ↑3 and ↓1 +2
Views 712
Comments 2

Принципиально новый метод позволяет тренировать ИИ практически без данных

Madrobots corporate blog Machine learning *Artificial Intelligence
Translation

Мифический носорогоединорог. MS TECH / PIXABAY

Обучение «менее чем с одной» попытки помогает модели идентифицировать больше объектов, чем количество примеров, на которых она тренировалась.

Как правило, машинное обучение требует множества примеров. Чтобы ИИ-модель научилась распознавать лошадь, вам потребуется показать ей тысячи изображений лошадей. Поэтому технология настолько вычислительно затратна и сильно отличается от человеческого обучения. Ребенку зачастую нужно увидеть всего несколько примеров объекта, или даже один, чтобы научиться распознавать его на всю жизнь.
Определяем носорогоединорогов без обучения
Total votes 35: ↑31 and ↓4 +27
Views 13K
Comments 18

Как распознать рукописный текст с помощью ИИ на микроконтроллерах

SkillFactory corporate blog Programming *C++ *Programming microcontrollers *DIY
Translation
Tutorial


Распознавание рукописных цифр с помощью TensorFlow и MNIST стало довольно распространённым введением в искусственный интеллект (ИИ) и ML. «MNIST» — это база данных, которая содержит 70 000 примеров рукописных цифр. Она широко используется как источник изображений для обучения систем обработки изображений и программного обеспечения для машинного обучения.

Хотя учебные пособия по ML с использованием TensorFlow и MNIST стали привычными, до недавнего времени они обычно демонстрировались в полнофункциональных средах обработки с архитектурой x86 и графическими процессорами класса рабочих станций. Однако сегодня можно создать полнофункциональное приложение для распознавания рукописного ввода MNIST даже на 8-разрядном микроконтроллере. Чтобы продемонстрировать это, мы собираемся создать полнофункциональное приложение для распознавания рукописного ввода MNIST, используя TensorFlow Lite для получения результатов ИИ на маломощном микроконтроллере STMicroelectronics на базе процессора ARM Cortex M7.

Приятного чтения!
Total votes 18: ↑18 and ↓0 +18
Views 5.2K
Comments 12

Как прикрутить нейросеть к сайту по-быстрому

Python *Image processing *Machine learning *Flask *
Tutorial


В данном материале предлагается, приложив небольшие усилия, соединить python 3.7+flask+tensorflow 2.0+keras+небольшие вкрапления js и вывести на web-страницу определенный интерактив. Пользователь, рисуя на холсте, будет отправлять на распознавание цифры, а ранее обученная модель, использующая архитектуру CNN, будет распознавать полученный рисунок и выводить результат. Модель обучена на известном наборе рукописных цифр MNIST, поэтому и распознавать будет только цифры от 0 до 9 включительно. В качестве системы, на которой все это будет крутиться, используется windows 7.
Читать дальше →
Total votes 4: ↑4 and ↓0 +4
Views 4.9K
Comments 6

Интуиция Искусственного Интеллекта — миф или реальность?

Abnormal programming *Python *Data Mining *Artificial Intelligence
Recovery mode
Одно из самых известных, наиболее интересное и совсем не изученное свойство человеческого разума с давних пор привлекавшее исследователей это интуиция.

Со времен древности философы и математики пытались хоть как как то понять и определить смысл этого могучего нашего свойства.

Еще Платон разделял и выделял нелогическое познание,

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

Гегель указывал на непосредственное знание, и даже Фейербах упомянул о чувственности познания!

В данной статье автор попытается провести такое же исследование интуиции, но не человеческой, нам всем знакомой и известной, а определить и показать интуицию у искуственного интеллекта, у нейронной сети.
Читать дальше →
Total votes 2: ↑2 and ↓0 +2
Views 1.6K
Comments 3

Как при помощи ИИ сделать распознавание вводимых вами рукописных цифр прямо в браузере

SkillFactory corporate blog Website development *JavaScript *Machine learning *TensorFlow *
Translation
Tutorial

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

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

Читать далее
Total votes 8: ↑8 and ↓0 +8
Views 2.7K
Comments 8

Как я запускал классификацию изображений на домашнем кластере Apache Ignite ML

Java *Apache *Machine learning *
Sandbox

Я - студент университета, знаком с машинным обучением в рамках пройденного курса, есть интерес к современным кластерным технологиям, конкретно - к Apache Ignite. Под катом — история о том, как я запускал пример OneVsRestClassificationExample из дистрибутива.

Читать далее
Total votes 6: ↑5 and ↓1 +4
Views 2.3K
Comments 4

Копнем поглубже: сравниваем популярные алгоритмы оптимизации с менее известными. Часть 2

Prequel corporate blog Algorithms *Image processing *Machine learning *Artificial Intelligence


Еще раз здравствуй, Хабр! Меня зовут Мария Белялова, и я занимаюсь data science в мобильном фоторедакторе Prequel. Кстати, именно в нём и обработана фотография из шапки поста.

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

В этой статье мы посмотрим, как они ведут себя на игрушечной задаче — распознавании цифр из датасета MNIST. В следующей части мы проверим эти алгоритмы в бою на реальной задаче из продакшена. Код для этой и предыдущей части находится здесь.
Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Views 2.7K
Comments 1

Игра в собственные

Python *Mathematics *Machine learning *
Tutorial

Имеем набор данных в виде совокупности квадратных матриц, которые используются - вместе с известным выходом - в качестве тренировочного набора для нейронной сети. Можно ли обучить нейронную сеть, используя только собственные значения матриц? Во избежание проблем с комплексными значениями, упор делаем на симметричные матрицы. Для иллюстрации используем набор данных MNIST. Понятно, что невозможно восстановить матрицу по ее собственными значениям - для этого понадобится еще кое-что, о чем мы поговорим далее. Поэтому трудно ожидать некоего прорыва на данном пути, хотя известно, что можно говорить о чем угодно, строить грандиозные планы, пока не пришло время платить. О деньгах мы здесь не говорим, просто задаем глупый вопрос, на который постараемся получить осмысленный ответ, тем более что в процессе познания расширим свои научные горизонты. Например, сначала мы познакомимся с тем, как находить собственные векторы и собственные значения (eigenvalues and eigenvectors) для заданной квадратной матрицы, затем плавно выкатим на эрмитовы и унитарные матрицы. Все иллюстративные примеры сопровождаются простыми кодами. Далее возьмем MNIST , преобразуем в набор собственных значений симметричных матриц и используем молоток от Keras. Как говорят в Японии: “Торчащий гвоздь забивают”. Закроем глаза и начнем бить, а на результат можно и не смотреть: получится как всегда. Сразу скажу, что изложение будет проведено как можно ближе к тому, как я это дело понимаю для себя, не обращаясь к строгому обоснованию, которое обычно не используется в повседневной жизни. Иными словами, что понятно одному глупцу, понятно и другому. Все мы невежественны, но, к счастью, не в одинаковой степени. С другой стороны, предполагаю, что многие, хоть и в гимназиях не обучались, но имеют представление - по своему опыту обучения, - что значит впихнуть невпихуемое.

Читать далее
Total votes 7: ↑5 and ↓2 +3
Views 3.2K
Comments 0