На чем пишут нейросети
Перейти к содержимому

На чем пишут нейросети

  • автор:

На чем пишут нейросети

Искусственный интеллект или AI (artificial intelligence) довольно быстро стал неотъемлемой частью жизни современного человека. Еще несколько месяцев назад люди не знали о ChatGPT, а уже сейчас государства по всему миру обсуждают его внедрение в свою работу.

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

Содержание:

Python

Python — самый известный язык программирования для работы с искусственным интеллектом. Причин у этого две: простота и гибкость.

Популярность Python обусловлена обширной коллекцией доступных библиотек и фреймворков. Такие библиотеки, как TensorFlow, PyTorch и Keras, позволяют разработчикам создавать сложные модели по типу ChatGPT и LLaMA.

Помимо этого, рост спроса на AI привел к появлению специфических для этой сферы библиотек и фреймворков. Например, scikit-learn и NLTK облегчают задачи обработки естественного языка, а Keras позволяет удобно строить модули нейросети, просто добавляя функции или классы.

Заставь искусственный интеллект самообучаться и совершенствоваться – выбирай онлайн-курсы в каталоге курсов по машинному обучению.

Что касается минусов Python, выделить можно разве что потребление памяти, что может стать проблемой при работе с большими массивами данных. Тем не менее преимущества Python перевешивают недостатки, из-за чего большая часть AI-разработчиков использует в своей работе именно его.

Java

Java — популярный язык программирования, который выделяется среди конкурентов своими производительностью и масштабируемостью.

Активное сообщество программистов, которое собралось вокруг этого языка, регулярно разрабатывает новые инструменты, ориентированные на работу с AI. Из специфических библиотек и фреймворков можно отметить WEKA и Deeplearning4j.

Одним из значительных преимуществ Java является его производительность. Это компилируемый язык, а, значит, перед выполнением код преобразуется в машинный код. Этот процесс приводит к более быстрому выполнению и лучшей производительности по сравнению с интерпретируемыми языками (PHP, Python и JavaScript).

У Java есть один недостаток — это не очень дружелюбный к новичкам язык, который может быть сложен в освоении без предыдущего опыта в программировании.

R

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

У R есть обширная коллекция статистических библиотек и фреймворков, таких как caret и mlr, позволяющих разработчикам создавать надежные и точные AI-модели. Одним из наиболее крупных преимуществ этого языка является простой и легкий в изучении синтаксис, что делает его идеальным выбором для новичков.

Впрочем, стоит учитывать, что производительность R может быть ниже, чем у других языков, что делает его непригодным для разработки крупномасштабных систем ИИ. R также имеет в разы менее крупное сообщество, чем Java и Python, а, значит, нередко решать проблемы придется самостоятельно.

C++

C++ — это низкоуровневый язык программирования, который обеспечивает высокую производительность и масштабируемость. Его часто используют для разработки проектов, требующих большой вычислительной мощности.

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

Как и в описанных выше языках, в C++ есть специфичные AI-библиотеки. Из наиболее крупных стоит отметить OpenCV и TensorFlow C++, которые значительно упрощают процесс разработки. Помимо этого, с Java, о котором мы говорили ранее, его роднит и комплириуемость, которая положительно сказывается на производительности.

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

Подписывайтесь на наш Telegram-канал, чтобы быть в курсе последних новостей и событий!

  • Искусственный интеллект
  • Девелопмент
  • Технологии

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

Экономим время с помощью искусственного интеллекта — повышаем свою квалификацию, эффективность и стоимость на рынке труда.

Иллюстрация: GPT-4 / Open AI / Simone Hutsch / Unspalsh / Annie для Skillbox Media

Дмитрий Зверев

Дмитрий Зверев

Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.

Арина Пучкова

Занимается NLP в стартапе Ex-Human.

Нейросети становятся всё более крутыми и мощными, а значит, игнорировать их — всё равно что стать луддитом и выступать против внедрения станков в производство. Конечно, можно провозгласить нейронки изобретением сатаны и таким образом отмахнуться от них. Однако факт остаётся фактом: кто не использует их в работе, теряет карьерные возможности.

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

Copilot

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

Copilot — это одна из первых нейросетей, которая позарилась на работу программистов. Она использует модель OpenAI Codex, обученную на миллиарде строк кода, чтобы с нуля создавать целые функции и даже готовые алгоритмы в режиме реального времени.

У нейросети есть плагины для популярных сред разработки: Visual Studio Code, Visual Studio, Neovim и IDE от JetBrains. Выглядеть её работа может так: мы написали имя класса, а Copilot предложил для него готовый метод.

Единственная проблема — стоимость подписки 10 долларов в месяц. Однако взамен вы получите удобный инструмент для ускорения работы с кодом.

Какие задачи можно решать: практически все, которые связаны с программированием.

Вот несколько примеров того, что Copilot умеет делать:

  • дополнение кода — помогает разработчикам дописывать блоки кода за них, учитывая контекст программы;
  • генерация кода — может генерировать фрагменты кода или создавать целые функции по текстовым описаниям;
  • рефакторинг — предлагает варианты, как улучшить структуру кода;
  • оптимизация кода — знает, как, например, заменить циклы на встроенные функции;
  • исправление багов — умеет проводить диагностику и предлагать способы исправления ошибок.

Ещё Copilot можно использовать при изучении новых языков программирования. Делается это просто: выбираете язык и просите нейросеть показать пример кода, а затем пишете его самостоятельно, чтобы закрепить знания.

«Copilot может генерировать большие участки кода по текстовому описанию. Я использовала его, когда нужно было, например, написать код для соединения разных сервисов с СУБД (MongoDB и Redis). До этого мне не приходилось работать с ними, поэтому нейросеть писала всё сама. И хотя функции нужно было написать довольно базовые, радует то, что не пришлось долго изучать документацию и тратить на это время».

Арина Пучкова,
дата-сайентист, автор телеграм-канала «я обучала одну модель»

Как начать пользоваться: перейти на официальный сайт и оформить пробный период, чтобы протестировать все возможности нейросети.

Tabnine

Что умеет: дописывает код за разработчика, обучаясь на его старом коде.

Tabnine — альтернатива Copilot. Эта сеть умеет подстраиваться под стиль и частые задачи конкретного программиста, чтобы в дальнейшем писать код, похожий на то, что человек написал бы сам. Для этого нейросеть постоянно анализирует, как вы объявляете переменные, описываете методы и тому подобное.

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

Tabnine можно встроить в популярные среды разработки. Вот список поддерживаемых IDE и редакторов кода с официального сайта проекта:

Какие задачи можно решать: те же, что и при помощи Copilot. Например:

  • дополнять код и учитывать стиль разработчика;
  • генерировать код — создавать фрагменты кода и целые функции по текстовому описанию;
  • исправлять синтаксис, чтобы не приходилось тратить время на поиск ошибок;
  • рефакторить код — делать проект более аккуратным и структурированным;
  • оптимизировать код — убирать лишние переменные и улучшать алгоритмы.

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

«В основном я использую Tabnine для дополнения кода. Обычно нейросеть даёт очень хорошие советы — например, предлагает имена недавно объявленных переменных, чтобы не прописывать их руками, а также показывает, какие операции можно с ними совершить.

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

Арина Пучкова,
дата-сайентист, автор телеграм-канала «я обучала одну модель»

Как начать пользоваться: установить нейросеть себе прямо в IDE по инструкции на официальном сайте.

ChatGPT

Что умеет: делает за программиста практически всё — например, пишет приложения с нуля, находит информацию в интернете и объясняет сложные вещи простыми словами.

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

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

Мы, например, попросили ChatGPT рассказать простым языком, как работают нейросети:

Одна из важных особенностей ChatGPT — что она запоминает всё, о чём вы общались. И дальнейшие ответы генерирует, учитывая весь ваш диалог и его контекст.

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

«Я много использовала ChatGPT для задач в data science — например, размечала с помощью неё данные. Обращалась к ней, когда нужно было разобраться со сложными алгоритмами, и иногда просила объяснить, как работает какая-нибудь функция из неизвестного для меня фреймворка. А ещё просила переписать скрипт с C++ на Python».

Арина Пучкова,
дата-сайентист, автор телеграм-канала «я обучала одну модель»

Как начать пользоваться: прочитать нашу статью, зарегистрировать аккаунт в OpenAI и получить доступ к чат-боту.

Fig

Что умеет: генерировать команды терминала по текстовому описанию.

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

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

Встроить нейросеть можно в терминалы Bash, Zsh и Fish. Кроме того, Fig может работать с некоторыми популярными языками программирования — например, Python, JavaScript, TypeScript, PHP и Ruby.

Какие задачи можно решать: сокращать число команд, которые вы вводите вручную.

Ещё Fig снижает количество ошибок в коде, выдавая рекомендации на основе уже существующего кода. Это особенно полезно, когда вы работаете с большими проектами, где простая ошибка может привести к критическим проблемам.

«Fig сокращает число операций, которые совершает программист. Инструмент предоставляет удобный интерфейс, в котором можно выбирать нужные пути до файлов, быстро дописывать команды в терминале и в целом ускорять свою работу».

Арина Пучкова,
дата-сайентист, автор телеграм-канала «я обучала одну модель»

Как начать пользоваться: скачать бесплатную версию с официального сайта и интегрировать нейросеть в свой терминал.

Documatic

Что умеет: писать документацию к коду.

Mintlify — это ещё один инструмент для автоматической генерации документации. Он очень простой и при этом поддерживает 12 языков программирования — например, Python, JavaScript и PHP.

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

Единственное ограничение Mintlify — она доступна только в VS Code и IntelliJ IDEA. Для других IDE плагинов пока нет.

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

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

Snyk Code

Что умеет: анализировать код и искать в нём уязвимости.

Snyk Code — это нейросеть для быстрого анализа кода на уязвимости. Она может проверять не только написанный вами код, но и обнаруживать проблемы в безопасности в сторонних библиотеках и фреймворках. Это может быть особенно полезно для больших проектов, где используется много внешних библиотек.

Ещё Snyk Code можно применять в командной разработке, чтобы проверять код коллег на уязвимости и вместе быстрее исправлять их.

Какие задачи можно решать: быстро обнаруживать уязвимости и исправлять их до того, как они попадут в продакшен. Ещё нейросеть Snyk Code можно интегрировать в процесс разработки и использовать его в качестве постоянного инструмента для тестирования.

Бесплатная версия Snyk Code позволяет проводить до 200 проверок в месяц. А платная версия снимает это ограничение и добавляет интеграцию с Jira.

Как начать пользоваться: перейти на официальный сайт, залогиниться в свой аккаунт и интегрировать его в свой GitHub-аккаунт.

Итоги

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

Спасибо Арине Пучковой за подборку полезных нейросетей и помощь в написании статьи. Обязательно подписывайтесь на её телеграм-канал, чтобы узнать больше о мире data science на практике.

Читайте также:

  • Что такое нейросеть и как она работает
  • Тест: рэпер, классик или нейросеть?
  • Как получить доступ к ChatGPT в России (а также Беларуси, Иране и везде, где он закрыт)

Какой язык программирования чаще всего используют для программирования нейронных сетей?

Facebook программирует на Lua и библиотеке Torch
Google — на Python и Tensorflow
Университет Монреаля во главе с Yoshua Bengio развивает Theano под Python
У Microsoft Research есть CNTK
Хардкорные ученые используют Matlab

По моему опыту, Python поудобнее будет. По производительности тоже ок — там внутри во всех библиотеках все равно сишка вертится.

Ответ написан более трёх лет назад
Комментировать
Нравится 6 Комментировать

От языка сие не зависит.

Базовая либа на С.
Но собственно прикладная нейронная сеть запрограммирована на Java.

Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
Machine learning engineer

из языков программирования примерно в таком порядке по убыванию:
1. Python
2. Matlab
3. C++

Для разработки очень полезны разные фреймворки, которые избавят от рутины.
Основные:
•Torch
•Tensorflow
•Caffe
•Theano
Caffe имеет обертку под python и matlab, но впечатления от его использования так себе: во первых он проблемный в установке (и дело не только в makefile.config) во вторых у встречаются ошибки даже после компиляции. На официальном сайте berkleyvision есть туториал, но мне он особо не помог.
Лично мне в эксплуатации нравится Tensorflow

Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

artem-morozov

Артем Морозов @artem-morozov
Выбирай Python.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

redsabien

Lisp, Clojure, Racket эти языки часто используют в ИИ и нейронных сетях.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

искусственный-интеллект

  • Искусственный интеллект

Как называется AI который заменяет лица на видео?

  • 1 подписчик
  • 17 окт.
  • 49 просмотров

искусственный-интеллект

  • Искусственный интеллект
  • +1 ещё

Есть ли такой сервис с AI?

  • 1 подписчик
  • 17 окт.
  • 103 просмотра

Программные среды для изучения основ нейронных сетей Текст научной статьи по специальности «Компьютерные и информационные науки»

нейронные сети / программные среды / нейронные сети для начинающих / библиотеки и языки программирования / задача классификации / задача прогнозирования. / neural networks / software environments / learning how neural networks work for beginners / libraries and programming languages / classification problem / forecasting problem

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — П.Ю. Богданов, Е.В. Краева, С.А. Веревкин, Е.Д. Пойманова, Т.М. Татарникова

В статье рассмотрены способы и методы изучения и построения нейронных сетей . Показано, что изучение принципов функционирования нейронных сетей , их применение для решения тех или иных задач возможны только через практику. Проведен анализ различных программных сред , которые могут быть использованы на лабораторных и практических занятиях по изучению и применению нейронных сетей . Выделен современный облачный сервис Google Colaboratory, рекомендуемый для обучения основам нейронных сетей благодаря наличию в нем предустановки библиотеки Tensorflow и библиотеки для работы на языке Python, бесплатного доступа к графическим процессорам, возможности написания и выполнения программного кода в браузере, а также отсутствию необходимости специальной настройки сервиса. Рассматриваются примеры проектирования нейронных сетей в Colaboratory, в частности, решение задач распознавания и классификации изображений, прогнозирования. Показано, что для распознавания и классификации изображений может быть использована сверточная нейронная сеть, особенностью которой является получение карты признаков изображения с последующей сверткой. Приведены фрагменты программного кода для этапов подключения необходимых библиотек, загрузки датасетов, нормализации изображений, сборки нейронной сети и ее обучения. Решение задачи прогнозирования рассмотрено на примере нейронной сети прямого распространения с алгоритмом обратного распространения ошибок в процессе обучения, суть которой в получении на выходном слое ожидаемого значения при подаче на входной слой соответствующих данных. Обратное распространение ошибок заключается в настройке весовых коэффициентов, дающих наибольшую корреляцию между входным набором данных и соответствующим ему результатом.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — П.Ю. Богданов, Е.В. Краева, С.А. Веревкин, Е.Д. Пойманова, Т.М. Татарникова

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ПРИЛОЖЕНИЯ С ИСПОЛЬЗОВАНИЕМ НЕЙРОННЫХ СЕТЕЙ ДЛЯ ВОССТАНОВЛЕНИЯ ИЗОБРАЖЕНИЙ ПОСЛЕ СЖАТИЯ С ПОТЕРЯМИ

Прогноз состояния объекта на основе применения фильтра Калмана и глубоких нейронных сетей
Конструктивный метод обучения искусственных нейронных сетей со взвешенными коэффициентами

Проектирование быстрой программной реализации специализированной нейросетевой архитектуры с разреженными связями

Обнаружение аномалий сетевого трафика методом глубокого обучения
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Software environments for studying the basics of neural networks

The paper describes the ways and methods of studying and constructing neural networks . It is shown that the study of the functioning guidelines of neural networks , their application for solving certain problems is possible only through practice. There is the analysis of various software environments that can be used in the laboratory and practical classes for the study and application of neural networks in the paper. Highlighted the modern cloud service Google Colaboratory, which is recommended for teaching the basics of neural networks due to the presence of a pre-installation of the Tensorflow library and a library for working in Python, free access to graphics processors, the ability to write and execute program code in a browser, and no need for special configuration of the service. Examples of designing neural networks in the Colaboratory are considered. In particular, solving recognition problems and image classification, predictive modeling. The authors show that a convolutional neural network can be used for image recognition and classification, a feature of which is obtaining the image features a map with subsequent convolution. There are chunks of code for the connecting phases the necessary libraries, loading data sets, normalizing images, assembling a neural network, and its training, in the paper. The solving of the forecasting problem is considered on the example of a feed-forward neural network with an algorithm for backpropagation of errors in the learning process, the essence of which is to obtain the expected value at the output layer when the corresponding data is fed to the input layer. Backpropagation of errors consists of adjusting the weights that give the greatest correlation between the input dataset and its corresponding result.

Текст научной работы на тему «Программные среды для изучения основ нейронных сетей»

УДК 004.8 Дата подачи статьи: 16.12.20

DOI: 10.15827/0236-235X.133.145-150 2021. Т. 34. № 1. С. 145-150

Программные среды для изучения основ нейронных сетей

П.Ю. Богданов 1, ст.. преподаватель, 45bogdanov@gmail.ru Е.В. Краева 1, ассистент, kate.smitt.by@mail.ru С.А. Веревкин 1, студент, vrjovkdn@rambler.ru Е.Д. Пойманова 1, к..т.н, доцент, e.d.poymanova@gmail.com

Т.М. Татарникова 1, д.т.н, доцент, директор Института информационных систем и геотехнологий, tm-tatarn@yandex.ru

1 Российский государственный гидрометеорологический университет, г. Санкт-Петербург, 192007, Россия

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

Проведен анализ различных программных сред, которые могут быть использованы на лабораторных и практических занятиях по изучению и применению нейронных сетей. Выделен современный облачный сервис Google Colaboratory, рекомендуемый для обучения основам нейронных сетей благодаря наличию в нем предустановки библиотеки Tensorflow и библиотеки для работы на языке Python, бесплатного доступа к графическим процессорам, возможности написания и выполнения програм -много кода в браузере, а также отсутствию необходимости специальной настройки сервиса.

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

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

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

В последние годы методы глубинного обучения — нейронные сети — позволили достичь впечатляющих успехов в таких областях, как компьютерное зрение, обработка естественного языка, обработка аудио [1, 2]. Нейронные сети используются для решения сложных задач, которые требуют аналитических вычислений, подобных выполняемым человеческим мозгом. Бытует мнение, что нет таких задач, с которыми не может справиться нейронная сеть, только было бы достаточно примеров для ее обучения [3].

Распространенными задачами, для решения которых привлекаются нейронные сети, являются: классификация — разделение данных по значимым признакам, прогнозирование — предсказывание следующего шага, распознавание -анализ изображения (объекта) с дальнейшей классификацией [4, 5].

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

— получение знаний о возможностях и сферах применения современной теории искусственных нейронных сетей посредством математического моделирования распространенных задач с помощью нейронных сетей различных видов;

— умение пользоваться специализированными пакетами прикладных программ, программными средами и языками программирования для проектирования нейронных сетей;

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

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

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

Для программирования нейронных сетей в настоящее время наиболее часто используется язык Python благодаря множеству библиотек с набором встроенных математических функций, таких как произведение векторов, транспонирование и тому подобное. Например, используя библиотеку Numpy, можно разработать простую нейронную сеть, решающую задачу прогнозирования. Библиотека Keras применяется при программировании сетей прямого распространения и решения задач распознавания речи. Для нейронных сетей, работающих с изображениями, необходимо подключение другого модуля, например TensorFlow [6].

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

Помимо Python, для написания программного кода, реализующего нейронную сеть, используются языки R, C Sharp, C++, Haskell, Java, Go и Swift. По-прежнему применяются такие пакеты прикладных программ, как MatLab и Deductor. Однако их использование ограничено отсутствием выбора видов и архитектур нейронных сетей.

Также необходима среда для разработки. Для экспериментов с нейронными сетями принято использовать Jupyter Notebook.

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

ности операционных систем и прочего, Google предлагает аналог — Colaboratory, не требующий установки на компьютер.

Google Colaboratory — современный облачный сервис, направленный на упрощение исследований в области машинного и глубокого обучения, так как все вычисления в Colabora-tory выполняются на удаленных серверах.

В Colaboratory предустановлены Tensor-Flow и практически все необходимые для работы Python библиотеки. Какой-либо отсутствующий пакет можно установить командой pip или утилитой apt-get.

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

Примеры решения некоторых задач в Colaboratory

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

Используем сверточную нейронную сеть, которая, как известно, направлена на работу с изображениями. В отличие от персептрона, рассматривающего все изображение сразу, сверточная нейронная сеть сканирует изображение по частям. Сверточные нейронные сети работают на основе фильтров, распознающих определенные характеристики изображения [7]. Фильтр представляет собой коллекцию кернелов — матрицу чисел, называемых весами, которая является результатом обучения и получения карты признаков «кернел-изображение». Фильтр перемещается вдоль изображения и определяет, присутствует ли искомая характеристика (кернел) на сканируемом участке изображения (рис. 1). Для получения ответа выполняется операция свертки, которая является суммой произведений элементов фильтра и матрицы входных сигналов (пикселей изображения).

Далее представлены фрагменты программного кода нейронной сети, реализованной в Colaboratory, которая умеет решать задачу классификации — различает изображения ко-

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

import numpy as np import tensorflow as tf import tensorflow_datasets as tfds from tensorflow.keras.preprocessing.image import load_img, img_to_array

from tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Dropout import matplotlib.pyplot as plt from google.colab import files

Поскольку нейронная сеть работает с изображениями, необходимо загрузить датасет для ее обучения. Представим пример загрузки Microsoft датасет с разными изображениями кошек и собак, объем датасета — 25 000 изображений, в описании датасета указано, что 1 700 картинок из 25 000 поврежденные, но TensorFlow умеет их фильтровать:

train, _ = tfds.load(‘cats_vs_dogs’, split=[‘train[:100%]’], with_info=True, as_supervised=True)

Поскольку все изображения для обучения нейронной сети должны иметь одинаковое разрешение, в переменной SIZE необходимо это указать, например 224*224. Затем проводится нормализация изображений — числовые значения пикселей переводятся в диапазон [0, 1] путем деления значения каждого пикселя на 255:

import numpy as np import tensorflow as tf import tensorflow_datasets as tfds from tensorflow.keras.preprocessing.image import load_img, img_to_array

from tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Dropout import matplotlib.pyplot as plt from google.colab import files

Далее происходит сборка архитектуры нейронной сети: вызывается метод для последовательного объявления слоев — сверточного, пулинга, полносвязного (base_layers, Global-AveragyPooling2D() и Dense (1) соответствен-

но). Слой пулинга представляет собой нелинейное уплотнение карты признаков, при котором группа пикселей уплотняется до одного пикселя, проходя нелинейное преобразование. Полносвязный слой выполняет нелинейные преобразования извлеченных признаков и собственно реализует классификацию. Для решения проблемы переобучения используется метод Dropout(0.2), где 0.2 — доля нейронов, случайно выключаемых из процесса обучения.

Нейронная сеть, собранная из готовых функций:

[ ] model = tf.keras.Sequential([ base_layers,

model.compile(optimizer=’adam’, loss=tf.keras.losses.BinaryCrossen-tropy(from_logits=True), metrics=[‘accura-cy’]) «

Следующий этап — обучение нейронной сети. В методе обучения указываются датасет и количество эпох обучения. Уже на второй эпохе точность классификации составила порядка 98,9 %:

[ ] model = tif(tran batches, epochs = 2)

— 847s 582ms/step — loss: 0.0436 — accuracy: 0.9844

— 842s 579ms/step — loss: 0.0418 — accuracy: 0.9847

После обучения нейронная сеть будет выдавать числовые результаты, по значениям которых осуществляется классификация: если результат значительно больше 1, то высока уверенность в определении метки класса «собаки», если результат намного меньше 0, то изображению присваивается метка класса «кошки» (рис. 2).

Таким образом, жизненный цикл нейронной сети [8] включает следующие этапы:

— подготовка данных (подключение библиотек, датасетов, нормализация данных);

— создание нейронной сети (выбор архитектуры, размера входного вектора, параметров обучения);

— обучение нейронной сети на датасетах;

— эксплуатация (решение задач, для которых создавалась нейронная сеть).

В следующем примере рассматривается задача прогнозирования с помощью нейронной

Рис. 1. Операция свертки Fig. 1. Convolution operation

Рис. 2. Визуализация результатов работы нейронной сети

Fig. 2. Visualizing results of the neural network

сети прямого распространения (персептрона), на котором можно изучать работу алгоритма обратного распространения ошибок, реализованного на Python [9, 10].

Нейронная сеть, обучаемая через обратное распространение ошибок, запоминает весовые коэффициенты, соответствующие паре «входные данные-выходные данные»:

Входные данные Выходные данные 0 0 1 0 1 1 1 1 1 0 1 1 0 1 1 0

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

После подключения библиотеки Numpy для работы с массивами объявляется функция активации, например сигмоидальная (рис. 3). Кроме сигмоидальной функции, в нейронных сетях используются функции активации — линейная, нелинейная, ступенчатая, гиперболический тангенс и другие. Для задачи прогнози-

рования выбрана сигмоидальная функция.

Далее происходит инициализация массива X входных данных в виде numpy-матрицы. Каждая строка — тренировочный пример, столбцы — нейроны входного слоя. Таким образом, получаются 3 нейрона входного слоя и 4 тренировочных примера.

Затем следуют выходные данные — матрица-столбец Y. Таким образом, выходной слой содержит 1 нейрон.

Следующий шаг — инициализация случайным образом матрицы весов нейронной сети syn0. После обучения сети в ней будут зафиксированы веса.

Тренировка нейронной сети заключается в многократных итерациях (в приведенном примере 10 000 раз), которые включают операции:

— определение первого слоя с входными данными;

— шаг предсказания (матричное перемножение X и syn0 и передача этих данных на вывод через сигмоиду);

Программный код нейронной сети с обратным распространением ошибок:

import numpy as np

def nonlin(x,deriv=False): if(deriv==True):

return f(x)*(1-f(x)) return 1/(1+np.exp(-x))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *