PyTorch — это среда машинного обучения , основанная на библиотеке Torch , [4] [5] [6] используемая для таких приложений, как компьютерное зрение и обработка естественного языка , [7] первоначально разработанная Meta AI и теперь являющаяся частью Linux Foundation . [8] [9] [10] [11] Она признана одной из двух самых популярных библиотек машинного обучения наряду с TensorFlow , предлагая бесплатное программное обеспечение с открытым исходным кодом, выпущенное под модифицированной лицензией BSD . Хотя интерфейс Python более совершенен и является основным направлением разработки, PyTorch также имеет интерфейс C++ . [12]
На базе PyTorch создан ряд программ глубокого обучения , в том числе Tesla Autopilot , [13] Uber ’s Pyro, [14] Hugging Face’s Transformers, [15] PyTorch Lightning , [16] [17] и Catalyst. [18] [19]
PyTorch предоставляет две функции высокого уровня: [20]
Meta (ранее известная как Facebook) использует как PyTorch , так и сверточную архитектуру для быстрого внедрения функций ( Caffe2 ), но модели, определенные этими двумя платформами, были взаимно несовместимы. Проект Open Neural Network Exchange ( ONNX ) был создан Meta и Microsoft в сентябре 2017 года для преобразования моделей между фреймворками. Caffe2 был объединен с PyTorch в конце марта 2018 года. [21] В сентябре 2022 года Meta объявила, что PyTorch будет управляться PyTorch Foundation, недавно созданной независимой организацией — дочерней компанией Linux Foundation . [22]
PyTorch 2.0 был выпущен 15 марта 2023 года. [23]
PyTorch определяет класс Tensor ( torch.Tensor
) для хранения однородных многомерных прямоугольных массивов чисел и работы с ними. Тензоры PyTorch похожи на массивы NumPy , но также могут работать на графическом процессоре NVIDIA с поддержкой CUDA . PyTorch также разрабатывает поддержку других платформ графических процессоров, например AMD ROCm и Apple Metal Framework. [24]
PyTorch поддерживает различные подтипы тензоров. [25]
Тензор в физике похож на тензор PyTorch тем, что по большей части представляет собой многомерный массив . Единственная дополнительная функция тензора физика, отсутствующая в тензоре PyTorch, заключается в том, что при индексировании его записей некоторые индексы записываются с нижним или верхним индексом, например . Количество верхних и нижних индексов в физическом тензоре называется типом тензора. Должно быть легко понять, что тип вышеупомянутого тензора — (2,3). Верхний индекс называется контравариантным индексом, а нижний индекс называется ковариантным индексом . Тензор физики поддерживает четыре фундаментальные операции:
Из них различие ко/контравариантности влияет только на операцию изменения базиса. На остальные три операции ко/контравариантность не влияет, и поэтому их легко реализовать для тензоров PyTorch. Таким образом, вопрос о том, заслуживает ли «тензор» PyTorch называться тензором, является вопросом мнения.
Тензор математика также немного отличается от тензора физика, но разница настолько незначительна, что не влияет на приложения. Для полноты картины для математика тензор типа (m,n) в векторном пространстве является элементом векторного пространства . Тогда первые три из четырех операций, описанных выше, можно выразить независимо от базиса, что делает четвертую операцию ненужной. Тензор физика затем получается в результате выбора основы для , что превращает тензор математика в многомерный массив. Поскольку выбор базиса для был произвольным , нам нужна операция смены базиса, чтобы устранить этот произвол, что в итоге и есть наша операция 4.
PyTorch определяет класс nn ( torch.nn
) для описания нейронных сетей и поддержки обучения. Этот модуль предлагает обширную коллекцию строительных блоков для нейронных сетей, включая различные уровни и функции активации, позволяющие создавать сложные модели.
Следующая программа демонстрирует низкоуровневую функциональность библиотеки на простом примере.
импортный фонарьdtype = факел . плаватьустройство = факел . устройство ( "cpu" ) # Выполняет все вычисления на процессоре# устройство = torch.device("cuda:0") # Это выполняет все вычисления на графическом процессоре# Создание тензора и заполнение тензора случайными числамиа = факел . randn ( 2 , 3 , устройство = устройство , dtype = dtype )print ( a ) # Выход тензора A# Вывод: tensor([[-1.1884, 0.8498, -1.7129],# [-0.8816, 0.1944, 0.5847]])# Создание тензора и заполнение тензора случайными числамиб = факел . randn ( 2 , 3 , устройство = устройство , dtype = dtype )print ( b ) # Вывод тензора B# Вывод: tensor([[ 0.7178, -0.8453, -1.3403],# [ 1.3262, 1.1512, -1.7070]])print ( a * b ) # Вывод умножения двух тензоров# Вывод: tensor([[-0.8530, -0.7183, 2.58],# [-1.1692, 0.2238, -0.9981]])print ( a . sum ()) # Вывод суммы всех элементов тензора A# Выход: тензор (-2,1540)print ( a [ 1 , 2 ]) # Вывод элемента в третьем столбце второй строки (отсчет от нуля)# Выход: тензор (0,5847)print ( a . max ()) # Вывод максимального значения в тензоре A# Вывод: тензор (0,8498)
Следующий блок кода показывает пример nn
модуля функциональности более высокого уровня. В примере определена нейронная сеть с линейными слоями.
импортный фонарьfrom torch import nn # Импортируем подмодуль nn из PyTorchclass NeuralNetwork ( nn . Module ): # Нейронные сети определяются как классы def __init__ ( self ): # Слои и переменные определяются в методе __init__ супер ( NeuralNetwork , сам ) . __init__ () # Должен быть в каждой сети. себя . сгладить = nn . Flatten () # Определение слоя сглаживания. себя . линейный_relu_stack = nn . Последовательный ( # Определение стека слоев. пп . Linear ( 28 * 28 , 512 ), # Линейные слои имеют входную и выходную форму. пп . ReLU (), #ReLU — одна из многих функций активации, предоставляемых nn пп . Линейный ( 512 , 512 ), пп . РеЛУ (), пп . Линейный ( 512 , 10 ), ) def вперед ( self , x ): # Эта функция определяет проход вперед. х = сам . сгладить ( х ) логитс = сам . линейный_relu_stack ( х ) вернуть логиты
FAIR привыкла работать с PyTorch — средой глубокого обучения, оптимизированной для достижения самых современных результатов в исследованиях, независимо от ограничений ресурсов.
К сожалению, в реальном мире большинство из нас ограничены вычислительными возможностями наших смартфонов и компьютеров.