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

Компьютерное зрение: загрузка и подготовка данных Fashion MNIST

Время на прочтение14 мин
Количество просмотров6.5K

Глубокое обучение — это набор методов, которые особенно хорошо работают с задачами компьютерного зрения и обработки естественного языка. DL является частью более широкой области, называемой машинным обучением (ML).

В данной практике мы хотим распознавать разные предметы одежды, обученные на наборе данных, содержащем 10 различных типов — по сути, проблема классификации изображений, а не данные, напоминающие что-то вроде набора данных Iris, который мы далее рассмотрим.

Читать далее

Подгон под MNIST-овский датасет

Время на прочтение7 мин
Количество просмотров9.4K

В интернете можно найти 1000 и 1 статью по тренингу мнистовского датасета для распознавания рукописных чисел. Однако когда дело доходит до практики и начинаешь распознавать собственные картинки, то модель справляется плохо или не справляется вовсе. Преобразуем произвольное изображение числа под MNIST-овский датасет.

Читать далее

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

Время на прочтение3 мин
Количество просмотров3K
Одно из самых известных, наиболее интересное и совсем не изученное свойство человеческого разума с давних пор привлекавшее исследователей это интуиция.

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

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

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

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

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

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

Время на прочтение10 мин
Количество просмотров50K

Содержание



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

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


Читать дальше →

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

Время на прочтение9 мин
Количество просмотров7.4K
В один из будничных дней, под вечер, от моего начальника прилетела интересная задачка. Прилетает ссылка с текстом: «хочу отсюда получить все, но есть нюанс». Через 2 часа расскажешь, какие есть мысли по решению задачи. Время 16:00.

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

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

image

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

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

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

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

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

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

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

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

Открываю вебдрайвер Хрома и скриню 1000 капчей себе в папку.
Читать дальше →

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

Время на прочтение11 мин
Количество просмотров23K

Содержание



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

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

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

    Картинка


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

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


Читать дальше →

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

Время на прочтение9 мин
Количество просмотров33K

Содержание



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

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

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

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

Коротко о GAN


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

Схема GAN:



Читать дальше →

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

Время на прочтение12 мин
Количество просмотров23K

Содержание



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

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

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

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



Иллюстрация из [1]
Читать дальше →

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

Время на прочтение6 мин
Количество просмотров1.1K
Эта статья про картинки и классификацию. Небольшое исследование свойств, такой вот штрих к портрету MNIST (ну и подсказка в решении других подобных задач).

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

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

Время на прочтение5 мин
Количество просмотров15K

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

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

Как правило, машинное обучение требует множества примеров. Чтобы ИИ-модель научилась распознавать лошадь, вам потребуется показать ей тысячи изображений лошадей. Поэтому технология настолько вычислительно затратна и сильно отличается от человеческого обучения. Ребенку зачастую нужно увидеть всего несколько примеров объекта, или даже один, чтобы научиться распознавать его на всю жизнь.
Определяем носорогоединорогов без обучения

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

Время на прочтение12 мин
Количество просмотров8.2K


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

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

Приятного чтения!

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

Время на прочтение7 мин
Количество просмотров16K


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

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

Время на прочтение9 мин
Количество просмотров6.2K

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

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

Читать далее

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

Время на прочтение5 мин
Количество просмотров3.3K

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

Читать далее

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

Время на прочтение6 мин
Количество просмотров5.9K


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

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

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

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

Время на прочтение7 мин
Количество просмотров168K
image
Идея для написания этой статьи возникла прошлым летом, когда я слушал доклад на конференции BigData по нейронным сетям. Лектор «посыпал» слушателей непривычными словечками «нейрон», «обучающая выборка», «тренировать модель»… «Ничего не понял — пора в менеджеры», — подумал я. Но недавно тема нейронных сетей все же коснулась моей работы и я решил на простом примере показать, как использовать этот инструмент на языке JavaScript.

Мы создадим нейронную сеть, с помощью которой будем распознавать ручное написание цифры от 0 до 9. Рабочий пример займет несколько строк. Код будет понятен даже тем программистам, которые не имели дело с нейронными сетями ранее. Как это все работает, можно будет посмотреть прямо в браузере.
Читать дальше →

Swift и TensorFlow

Время на прочтение8 мин
Количество просмотров13K
Я не люблю читать статьи, сразу иду на 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. На мой взгляд очень нагромождено и сложно.
Читать дальше →

Сравнение полносвязной сети и сверточной нейросети LeNet 5

Время на прочтение12 мин
Количество просмотров11K

Привет! Меня зовут Елдар, я – Machine Learning Engineer в компании Beeline Казахстан и студент магистратуры в Университете Цукуба. Работаю дистанционно из Японии, занимаюсь улучшением моделей аутентификации лиц.

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

Чтобы написать эту статью, я реализовал полносвязную многоуровневую сеть и архитектуру LeNet 5 в TensorFlow и протестировал на наборе данных MNIST по таким характеристикам как время обучения, время вывода (inference time), точность (accuracy) и потери (loss). А также сравнил полученные показатели с современными методами.  Время обучения включает проверку на валидационной выборке после каждой эпохи. Время вывода показывает время, необходимое для вывода результата после вскармливания одного изображения.

Сравниваем

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

Время на прочтение13 мин
Количество просмотров9K

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

Читать далее

Обучаем нейросеть распознавать цифры на выборке от MNIST. Реализация алгоритма обратного распространения на C#

Время на прочтение17 мин
Количество просмотров24K

Привет!

Будем обучать нейросеть распознавать рукописные цифры

Читать далее
1