Оригинальный автор(ы) |
|
---|---|
Разработчик(и) | Мета ИИ |
Первоначальный выпуск | Сентябрь 2016 ( 2016-09 ) | [1]
Стабильный релиз | 2.5.1 [2] / 29 октября 2024 г. ( 29 октября 2024 ) |
Репозиторий | github.com/pytorch/pytorch |
Написано в | |
Операционная система | |
Платформа | IA-32 , x86-64 , ARM64 |
Доступно в | Английский |
Тип | Библиотека для машинного обучения и глубокого обучения |
Лицензия | БСД-3 [3] |
Веб-сайт | pytorch.org |
Часть серии статей о |
Машинное обучение и интеллектуальный анализ данных |
---|
PyTorch — это библиотека машинного обучения , основанная на библиотеке Torch , [4] [5] [6], используемая для таких приложений, как компьютерное зрение и обработка естественного языка , [7] изначально разработанная Meta AI , а теперь являющаяся частью Linux Foundation . [8] [9] [10] [11] Это одна из самых популярных платформ глубокого обучения , наряду с другими, такими как TensorFlow и PaddlePaddle, [12] [13] предлагающая бесплатное и открытое программное обеспечение , выпущенное под измененной лицензией BSD . Хотя интерфейс Python более отполирован и является основным направлением разработки, PyTorch также имеет интерфейс C++ . [14]
На основе PyTorch создано множество программ глубокого обучения , в том числе Tesla Autopilot , [15] Uber 's Pyro, [16] Hugging Face 's Transformers, [17] PyTorch Lightning , [18] [19] и Catalyst. [20] [21]
PyTorch предоставляет две высокоуровневые функции: [22]
Meta (ранее известная как Facebook) управляет как PyTorch, так и Convolutional Architecture for Fast Feature Embedding ( Caffe2 ), но модели, определенные этими двумя фреймворками, были взаимно несовместимы. Проект Open Neural Network Exchange ( ONNX ) был создан Meta и Microsoft в сентябре 2017 года для преобразования моделей между фреймворками. Caffe2 была объединена с PyTorch в конце марта 2018 года. [23] В сентябре 2022 года Meta объявила, что PyTorch будет управляться независимым PyTorch Foundation, недавно созданным дочерним предприятием Linux Foundation . [24]
PyTorch 2.0 был выпущен 15 марта 2023 года, представляя TorchDynamo, компилятор уровня Python , который ускоряет выполнение кода до 2 раз, а также значительно улучшает производительность обучения и вывода на основных облачных платформах . [25] [26]
PyTorch определяет класс под названием Tensor ( torch.Tensor
) для хранения и работы с однородными многомерными прямоугольными массивами чисел. Тензоры PyTorch похожи на массивы NumPy , но также могут работать на графическом процессоре NVIDIA с поддержкой CUDA . PyTorch также разрабатывает поддержку других платформ графических процессоров, например, ROCm от AMD [27] и Metal Framework от Apple . [28]
PyTorch поддерживает различные подтипы тензоров. [29]
Обратите внимание, что термин «тензор» здесь не имеет того же значения, что и тензор в математике или физике. Значение этого слова в машинном обучении лишь поверхностно связано с его первоначальным значением как определенного вида объекта в линейной алгебре . Тензоры в PyTorch — это просто многомерные массивы.
PyTorch определяет модуль nn ( torch.nn
) для описания нейронных сетей и поддержки обучения. Этот модуль предлагает полный набор строительных блоков для нейронных сетей, включая различные слои и функции активации, что позволяет строить сложные модели. Сети строятся путем наследования от модуля torch.nn
и определения последовательности операций в forward()
функции.
Следующая программа демонстрирует низкоуровневую функциональность библиотеки на простом примере.
импортный факелdtype = torch . floatdevice = torch . device ( "cpu" ) # Выполнить все вычисления на CPU# device = torch.device("cuda:0") # Выполняет все вычисления на GPU# Создаем тензор и заполняем его случайными числамиa = torch.randn ( 2,3 , device = устройство , dtype = dtype ) печать ( а )# Вывод: тензор([[-1.1884, 0.8498, -1.7129],# [-0,8816, 0,1944, 0,5847]])b = torch.randn ( 2,3 , device = устройство , dtype = dtype ) печать ( б )# Вывод: тензор([[ 0.7178, -0.8453, -1.3403],# [ 1.3262, 1.1512, -1.7070]])распечатать ( а * б )# Вывод: тензор([[-0.8530, -0.7183, 2.58],# [-1.1692, 0.2238, -0.9981]])распечатать ( а . сумма ()) # Вывод: тензор(-2.1540)print ( a [ 1 , 2 ]) # Вывод элемента в третьем столбце второй строки (начиная с нуля)# Выход: тензор(0.5847)печать ( а . макс ())# Выход: тензор(0.8498)
Следующий блок кода определяет нейронную сеть с линейными слоями, использующую nn
модуль.
импортный факелfrom torch import nn # Импортировать подмодуль nn из PyTorchclass NeuralNetwork ( nn . Module ): # Нейронные сети определяются как классы def __init__ ( self ): # Слои и переменные определяются в методе __init__ super () . __init__ () # Должен быть в каждой сети. self.flatten = nn.Flatten ( ) # Построить выравнивающий слой . self.linear_relu_stack = nn.Sequential ( # Построить стек слоев . nn . Линейный ( 28 * 28 , 512 ), # Линейные слои имеют входную и выходную форму nn . ReLU (), # ReLU — одна из многих функций активации, предоставляемых nn nn . Линейный ( 512 , 512 ), nn . ReLU (), nn . Линейный ( 512 , 10 ), ) def forward ( self , x ): # Эта функция определяет прямой проход. x = само . сглаживание ( x ) logits = self.linear_relu_stack ( x ) возврат логитов
FAIR привыкла работать с PyTorch — фреймворком глубокого обучения, оптимизированным для достижения современных результатов в исследованиях, независимо от ограничений ресурсов. К сожалению, в реальном мире большинство из нас ограничены вычислительными возможностями наших смартфонов и компьютеров.