Где применяются Python и C/C++ (часть 2)
Данная статья продолжит рассказ о различии областей применения языков Python и C/C++.
Реклама
Вступление
Всем доброго дня! Сегодня мы продолжим говорить об области применения Python и C/C++. Тема областей применения очень обширная, поэтому информация была разделена на несколько статей. Переход на предыдущую статью: "Где применяются Python и C (часть 1)". Отложите свои IDE, налейте чая, возьмите вкусняшек и наслаждайтесь продолжением темы областей применения.
Нейронные сети и ML
Нейросети с каждым годом всё плотнее и плотнее входят в нашу повседневную и рабочую жизнь. Многие из вас задавали важные вопросы ChatGPT, GigaChat или генерировали картинки в Dall-e, правда, не многие задумывались как это работает.
Нейронные сети - это метод в искусственном интеллекте, который стремится воспроизвести способность человеческого мозга обрабатывать данные. Они представляют собой тип машинного обучения, известный как глубокое обучение, и используют структуру, состоящую из слоев искусственных нейронов, которые взаимодействуют друг с другом, имитируя работу человеческого мозга. Эти сети способны обучаться на основе данных, совершенствуясь с течением времени и адаптируясь к новым данным. Нейросеть можно написать "с нуля", а можно воспользоваться специальными библиотеками, чтобы обучить её модель и запустить распознавание котиков =) Я оставлю вам интересную статью с Хабра, где автор пишет нейросеть на Python с нуля. Это хорошо объяснит вам знание теории нейросетей на наглядном примере.
Машинное обучение (Machine Learning, ML) - это подотрасль искусственного интеллекта (AI), которая занимается созданием систем, способных учиться и адаптироваться на основе данных. Эти системы могут автоматически улучшать свои предсказания или решения с течением времени, анализируя новые данные. Машинное обучение использует различные алгоритмы и методы для обучения моделей на основе данных, что позволяет им выполнять задачи, которые ранее требовали явного программирования. Давайте разберёмся какие библиотеки нейронных сетей с ML есть для python и C++.
PyTorch - это открытая библиотека машинного обучения, основанная на фреймворке Torch, написанном на языке C. Поддерживает Python и C++. Она широко используется в приложениях машинного обучения, связанных с обработкой естественного языка или компьютерным зрением. PyTorch известна своей высокой скоростью выполнения при работе с большими, плотными наборами данных и графами.
TensorFlow является одной из самых мощных библиотек для глубокого обучения, разработанной Google. Поддерживает Python и C++. Она позволяет строить и тренировать сложные нейронные сети и поддерживает широкий спектр операций для работы с тензорами. Тензор в контексте машинного обучения и глубокого обучения - это многомерный массив данных, который используется для хранения числовых значений. Тензоры являются основным типом данных в TensorFlow и других библиотеках глубокого обучения, таких как PyTorch. Они играют ключевую роль в обработке данных и выполнении математических операций, которые необходимы для обучения и инференции моделей глубокого обучения. Инференция относится к процессу использования уже обученной модели для получения прогнозов или предсказаний на новых данных. TensorFlow известна своей гибкостью и масштабируемостью, поддерживая как CPU, так и GPU, а также облачные вычисления.
YOLO (You Only Look Once) - алгоритм машинного обучения, специализированный на обнаружении объектов в изображениях. Поддерживает Python и C++. Он был разработан командой Allen Institute for Artificial Intelligence и впервые представлен в 2016 году. YOLO отличается высокой скоростью обработки, что позволяет проводить обнаружение объектов в реальном времени, что делает его особенно полезным для приложений, требующих быстрого анализа изображений, например, в системах видеонаблюдения или автономных автомобилях.
Недавно мне довелось побывать на хакатоне EKF AI Challenge и попробовать YOLO на практике. Нам дали задачу написать веб приложение для определения электрических компонентов на однолинейной электросхеме. Мой коллега обучал модель YOLO, а я встраивал её во flask-приложение. Помимо встраивания модели нейросети в код и механики взаимодействия с ней я написал и всё остальные части для веб приложения. По отзыву моего коллеги обучение модели нейросети довольно сложная и долгая задача, зачастую провальная. Нам удалось научить нейросеть определять классы электронных компонентов, считать их количество, обрабатывая png, pdf, img схемы и выдавать результат в виде xlsx формате для Excel.
А теперь вернемся к статье =)
Также существуют библиотеки для работы с нейронными сетями и на чистом C. Сейчас я приведу пару примеров из них.
FANN - это открытая библиотека нейронных сетей на языке C. Она реализует многослойные искусственные нейронные сети с поддержкой полностью соединенных и слабо соединенных сетей. FANN легка в использовании, универсальна, хорошо документирована и обладает высокой скоростью. Возможности включают обучение с обратным распространением ошибки, эволюционное изменение топологии, кроссплатформенность и возможность использования как чисел с плавающей точкой, так и фиксированной точки.
Genann - это минимальная, хорошо проверенная библиотека для обучения и использования прямых искусственных нейронных сетей (ANN) на языке C. Ее основное внимание сосредоточено на простоте, скорости, надежности и возможности модификации. Genann достигает этого, предоставляя только необходимые функции и ничего лишнего. Она реализует обучение с обратным распространением ошибки и совместима с альтернативными методами обучения (классическая оптимизация, генетические алгоритмы и т.д.). Генетические алгоритмы - это методы оптимизации, вдохновленные процессами естественной эволюции. Они используются для решения сложных проблем поиска, оптимизации и классификации, где традиционные методы могут быть неэффективными или неприменимыми. Генетические алгоритмы основаны на принципах наследственности, мутации, скрещивания и естественного отбора, которые являются ключевыми аспектами биологического эволюционного процесса.
Это далеко не все нейросети, которые работают с языками Python, C, C++. Тема настолько огромна, что её трудно раскрыть целиком в одной статье. Если среди читателей есть те кто увлекается нейросетями и ML, то напишите в комментариях что-то интересное о тех нейросетях и ML, которых я не коснулся в этой статье.
Научные вычисления и аналитика данных
Научные вычисления в программировании относятся к использованию компьютерных программ для решения математических моделей проблем в науке и инженерии. Это включает в себя широкий спектр инструментов, техник и теорий, необходимых для решения таких задач на компьютере.
Аналитика данных в программировании - это процесс обнаружения значимых закономерностей в данных, их интерпретации и передачи. Это помогает выявлять важную информацию и значимые данные, которые в ином случае могли пройти мимо. Основной задачей аналитики данных является принятие более обоснованных решений на основе информации, полученной путем обработки данных. Такие решения помогают компаниям повышать продажи, снижать затраты и реализовывать другие улучшения. Давайте познакомимся поближе с библиотеками дня них. Начнём с языка Python.
NumPy - это фундаментальная библиотека для научных вычислений с Python, добавляющая поддержку больших многомерных массивов и матриц, а также большой набор высокоуровневых математических функций для работы с этими массивами. Я уверен, что многие питонисты если не работали, то слышали об этой популярной библиотеке.
SciPy используется учеными, аналитиками и инженерами для научных и технических вычислений. Она содержит модули для оптимизации, линейной алгебры, интеграции, интерполяции, специальных функций, FFT, обработки сигналов и изображений, решателей обыкновенных дифференциальных уравнений и других задач, обычных в науке и инженерии.
Matplotlib используется для генерации фигур с акцентом на построение данных, хранящихся в массивах NumPy. Это мощный инструмент для визуализации данных, который позволяет создавать сложные графики и диаграммы для анализа и представления результатов исследований.
В конце статьи я оставлю ссылку на интересный доклад с Яндекс PyTup, посвящённый визуализации данных.
Все библиотеки выше применяются как для научных вычислений, так и для анализа данных в аналитике. В дополнение к информации по аналитике данных я оставлю интересную статью с Хабр, в которой рассказывается с какими задачами сталкивается аналитик данных и какой код он пишет. Теперь давайте разберёмся, что нам доступно для языка C++.
Eigen - это высокопроизводительная библиотека шаблонов C++ для линейной алгебры, включая векторы, матрицы и тензоры. Она поддерживает широкий спектр операций над этими структурами данных, включая умножение матриц, транспонирование, нормализацию и многое другое. Eigen оптимизирована для производительности и может быть использована в научных вычислениях для обработки больших объемов данных.
Boost.Math - это часть библиотеки Boost, которая предоставляет набор математических алгоритмов и структур данных. Она включает в себя функции для работы с комплексными числами, статистическими распределениями, математической серией, численными методами решения обыкновенных дифференциальных уравнений и многое другое. Boost.Math может быть полезна для научных вычислений, требующих точных математических операций.
Армадилло - это современная C++ библиотека для линейной алгебры с высокоуровневым API, похожим на Matlab. Она предоставляет простой и эффективный интерфейс для работы с векторами и матрицами, а также включает в себя множество функций для линейной алгебры, включая умножение матриц, транспонирование, нормализацию и многое другое. Армадилло хорошо подходит для научных вычислений, где требуется эффективная работа с многомерными данными.
Эти библиотеки предоставляют мощные инструменты для научных вычислений и аналитики данных в C++, позволяя разработчикам эффективно работать с большими объемами данных и выполнять сложные математические операции.
Plotly для C++ позволяет создавать сложные и красивые интерактивные графики и диаграммы прямо из вашего кода на C++. Библиотека поддерживает широкий спектр типов графиков, включая линейные графики, гистограммы, тепловые карты, scatter plots и многое другое. Plotly также предлагает возможность экспорта графиков в различных форматах, включая HTML, PNG, SVG и PDF. Это делает его отличным выбором для визуализации результатов аналитики данных и научных вычислений. Его добавление значительно упрощает процесс визуализации результатов исследования, позволяя быстро и эффективно представлять сложные данные и паттерны в наглядной форме.
Для простого языка C тоже имеется ряд полезных библиотек в этой сфере.
GSL - это библиотека для научных вычислений, предоставляющая широкий спектр математических функций и алгоритмов. Она включает в себя функции для работы с комплексными числами, специальными функциями, статистическим анализом, оптимизацией, решениями обыкновенных дифференциальных уравнений и многое другое. GSL является стандартом для научных вычислений в C и широко используется в академических и промышленных приложениях.
PLOT - это библиотека для визуализации данных в C, которая позволяет создавать различные виды графиков, включая линейные графики, гистограммы, scatter plots и многое другое. Scatter plots, также известные как диаграммы рассеяния или точечные графики, используются для визуализации отношений между двумя числовыми переменными. PLOT предоставляет простой и понятный API для создания графиков, что делает ее удобной как для начинающих так и для опытных разработчиков.
Big Data
Big Data - это термин, используемый для описания больших объемов данных, которые трудно обрабатывать, хранить, анализировать и интерпретировать с использованием традиционных методов и инструментов. Эти данные могут происходить из различных источников, включая интернет, мобильные устройства, социальные сети, облачные сервисы, IoT-устройства и многое другое. Big Data характеризуется четырьмя основными свойствами: большим объемом (Volume), скоростью генерации данных (Velocity), разнообразием источников данных (Variety) и сложностью анализа (Veracity). Давайте разберёмся, какие возможности нам предоставляет Python в данной сфере.
Pandas - это библиотека для обработки и анализа данных, которая предоставляет структурные объекты данных и инструменты для манипуляций с ними. Pandas позволяет легко загружать данные из различных источников, преобразовывать их, агрегировать и анализировать, что делает его незаменимым инструментом для работы с Big Data.
Apache Spark - это фреймворк для обработки Big Data, который поддерживает Python через PySpark. Spark позволяет выполнять сложные вычисления на больших объемах данных с высокой скоростью и эффективностью. PySpark предоставляет интерфейс Python для работы с Spark, позволяя разработчикам писать код на Python для обработки Big Data.
Dask - это фреймворк для параллельных вычислений в Python, который позволяет работать с большими наборами данных, распределяя вычисления по нескольким процессам или узлам. Dask особенно полезен для задач, которые нельзя эффективно разделить на меньшие части из-за зависимости между данными или шагами процесса. Он предоставляет высокоуровневый интерфейс, который похож на Pandas, но позволяет обрабатывать данные, превышающие объемы памяти, используя распределенные вычисления.
В ссылках к данной статье я поделюсь с вами интересной и увлекательной статьёй про Big Data на Python. Там вам более подробно расскажут про области применения и не только, а также вы увидите примеры кода. Давайте теперь узнаем, что есть для Big Data в низкоуровневом C++.
Apache Arrow - это кроссплатформенная библиотека, разработанная проектом Apache, которая предоставляет эффективные механизмы для хранения и манипулирования данными. Она особенно полезна при работе с большими наборами данных, поскольку позволяет ускорять операции чтения и записи за счет использования компактного формата Columnar Memory Format. Apache Arrow поддерживает широкий спектр типов данных и предлагает API для различных языков программирования, включая C++.
HDF5 (Hierarchical Data Format version 5) - это стандартный формат файла для хранения больших объемов данных. Он поддерживает сложную иерархическую структуру данных и оптимизирован для быстрого доступа к данным. Библиотека HDF5 для C++ позволяет легко читать и писать данные в этом формате, что делает ее идеальным выбором для научных вычислений и анализа данных.
На этом я завершаю вторую часть статьи про области применения. Напишите в комментариях к данной статье - какие ещё темы я не затронул в этих двух главах. Если наберётся хотя бы 2 темы, то я выпущу третью часть на данную тематику. Дальше будет ещё интереснее :)
Заключение
- Рассмотрели тему нейронных сетей и ML;
- Поговорили о научные вычислениях и аналитике данных;
- Узнали о Big Data;
Все статьи