Pytorch | Подробное объяснение пакета научных вычислений Pytorch - Tensor

глубокое обучение

Эта статья возникла из личного публичного аккаунта:TechFlow, оригинальность это не просто, прошу внимания


СегодняТемы PytorchВо второй части давайте продолжим разбираться в использовании Tensor в Pytorch.

В предыдущей статье мы кратко представили, как создать тензор, сегодня продолжим копать глубже.Другое использование тензора.

тензорные операции

размер и форма

мы можем использоватьФункция size() или прямой вызов атрибута shape в тензореПолучите размер тензора, оба эквивалентны, в общем, мы больше используем первый.

view

Мы можем изменить форму тензора через представление, оно будет основано на форме, которую мы укажем.возвращает новый тензор.

На что обратить внимание, ПосмотретьВозвращает ссылку на исходные данные, то есть если мы изменим исходные данные, то изменится и результат представления.

В приведенном выше примере мы изменили положение [0, 1] в исходном тензоре x на 2, напечатали y и обнаружим, что элементы в y также изменились.

numel

мы можем использовать числоПолучить количество элементов в тензоре:

сжимать и разжимать

мы можем использоватьсжать, чтобы уменьшить размерность тензора, при использованиирасжать, чтобы увеличить размер тенора.

где unsqueeze принимает параметр, который позволяет нам указать размер, который мы хотим увеличить. Мы можем четко видеть изменения в данных через размер:

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

Также поддерживается доступ к данным с использованием другого массива в качестве индекса:

Тензорный индекс

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

Он поддерживает многомерные индексы:

Также поддерживается нарезка:

Вы также можете получить элементы через логический массив:

Тензорные операции

В Tensor большое количество вычислительных API, мы перечислим только наиболее часто используемые, остальные используются редко, при необходимости вы можете просмотреть соответствующие документы.

сложение, вычитание, умножение и деление

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

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

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

Среди прочего, это позволяет намвыполнить операцию на месте, то есть напрямую изменить исходное значение тензора, а не возвращать его через значение функции. В отличие от дизайна передачи параметров на месте в Numpy, Tensor отличается API. Добавление подчеркивания к исходному имени функции — это API на месте. Например, метод добавления на месте — add_.

матричное скалярное произведение

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

В Numpy мыВычислите внутренний продукт между двумя матрицами с помощью точечной функции, и в Tensor проводится строгое различие: только одномерные векторы могут использовать точку для вычисления умножения точек, а многомерные векторы могут использовать только matmul для вычисления умножения матриц. Для упрощения такжеmm можно использовать вместо matmul. Если вы изучали TensorFlow, вы обнаружите, что matmul — это API для умножения точек в TensorFlow, и это имя используется в Pytorch.

Видно, что результаты, полученные mm и matmul, согласуются.

преобразование типов

В Numpy мы преобразуем тип с помощью метода astype и разбиваем этот метод на Tensor,Каждый тип имеет свою функцию преобразования.

Например, если мы хотим преобразовать тензор в тип int, мы вызываем метод int(), а если мы хотим преобразовать его в тип float, мы вызываем метод float(). После вызова этих методов возвращается новый тензор.

Тензор определяет 7 типов процессоров и 8 типов графических процессоров:

Мы можем вызывать встроенные функции для преобразования их друг в друга.Эти функции преобразования: long(), half(), int(), float(), double(), byte(), char(), short() . Я считаю, что смысл этих функций должен быть понятен каждому.

Транспонировать и трансформировать

Операция транспонирования в Tensor отличается от операции в Numpy.В Numpy мы используем метод .T или транспонирования для транспонирования матрицы. Если многомерный массив транспонирован, Numpy полностью перевернет его размеры.

И в тензореОтличие двумерных массивов от многомерных массивов, для транспонирования двумерного массива используется функция t(), которая совпадает с .T и меняет местами две оси двумерного массива.

еслиВызов функции t для многомерного массива сообщит об ошибке, если мы хотим преобразовать форму многомерного массива, мы можем вызвать методы транспонирования и перестановки. Давайте сначала поговорим о методе транспонирования, который получает два параметра int,Указывает на две оси, которые необходимо поменять местами.. Например, для матрицы формы [4, 3, 2] мы можем использовать 0, 1, 2 для представления всех ее осей, передать два и указать две оси, которые мы хотим поменять местами:

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

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

Перемещение между устройствами

Мы можем увидеть устройство, на котором в данный момент находится тензор, через свойство устройства:

Мы можем передать тензор из CPU в GPU через функцию cuda, но делать это не рекомендуется. Лучший способИспользуйте метод to для передачи устройства.

Передача тензора на графический процессор для расчета может использовать производительность параллелизма графического процессора для повышения эффективности вычислений., который является широко используемым методом в Pytorch. Метод to может не только изменить устройство тензора, но и одновременно изменить тип элементов в тензоре:

Суммировать

Хотя у тензора есть много дополнительных функций и функций вычисления, смысл тензора не только в этом. Самое главное, он можетУвеличьте скорость наших вычислений. Принцип также очень прост, потому что в Python List каждый элемент на самом деле является объектом. Даже если мы сохраним int или float, Python завернет их в объект, что приведет к дополнительным накладным расходам. Если только небольшой объем данных оказывает незначительное влияние, если он составляет порядка миллионов или даже больше, то разрыв между ними будет очень большим. Другое дело, что нижний слой тензорной библиотеки — это тоже C и C++, а эффективность работы явно выше у Python. так что мыЕго нельзя понимать просто как расчетный пакет, для глубокого обучения это не просто вычисления.

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

Эта статья основана на графическом процессоре Didi Cloud, аренде графического процессора Didi Cloud с использованиемМастер-код искусственного интеллекта DiDi Cloud 2323, воспользуйтесь скидкой 10%.

Если вам понравилась эта статья, пожалуйстаобращать внимание, подбодрите меня и облегчите доступ к другим статьям.

В этой статье используетсяmdniceнабор текста