Первоначальное использование Pytorch

Создать тензор

Если массив является объектом операции numpy, то тензорTensor — это единица операции pytorch. С точки зрения содержания данных он точно такой же, как многомерный массив, но как класс, его конструктор поддерживает инициализацию, объявляя размеры тензора, пример следующий:

import torch as t
z = t.Tensor(3, 4)
print(z)
'''
tensor([[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]])
'''

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

r = t.rand(3,4)

rЭто один 3 × 4 3\times4 3×Случайная матрица 4, содержимое следующее

[ 0,6220 0,3771 0,4598 0,0340 0,6928 0,1479 0,9832 0,3954 0,8050 0,3466 0,9227 0,1516 ] \begin{bmatrix} 0,6220& 0,3771& 0,4598& 0,0340\\ 0,6928& 0,1479& 0,9832& 0,3954\\ 0,8050& 0,3466& 0,9227& 0,1516\\ \end{bmatrix} 0,62200,69280,80500,37710,14790,34660,45980,98320,92270,03400,39540,1516

Укажите устройство

Если установлена ​​версия pytorch для видеокарты, можно указать матрицу, созданную pytorch, для записи на видеокарту.

ct = t.rand(5000, 5000, device=t.device('cpu'))
dt = t.rand(5000, 5000, device=t.device('cuda'))

Параллельная структура видеокарты демонстрирует большие возможности в матричных вычислениях. Давайте проверим это ниже 5000 × 5000 5000\times5000 5000×5000 Разница в скорости вычисления матрицы

from timeit import timeit
timeit(lambda: ct@ct, number=10)    # 返回 7.714848299976438
timeit(lambda: dt@dt, number=10)    # 返回 1.27076860005036

Это эквивалентно тому, что процессору требуется 0,7 секунды для одного вычисления, а Cuda — всего 0,1 секунды. Этот разрыв будет увеличиваться по мере увеличения размера матрицы.

Рассчитать по оси

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

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

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

t.mean(dt)
# tensor(0.5000, device='cuda:0')

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

t.mean(dt, axis=1)
# tensor([0.4965, 0.5018, ..., 0.5057, 0.4993], device='cuda:0')

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

v = t.arange(5)     # 0, 1, 2, 3, 4
v.repeat(3)         # 
# tensor([0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4])
v31 = v.repeat(3,1)

v31 означает копирование один раз в направлении первой оси и три раза в направлении второй оси.Результат:

[ 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 ] \begin{bmatrix} 0& 1& 2& 3& 4\\0& 1& 2& 3& 4\\0& 1& 2& 3& 4 \end{bmatrix} 000111222333444

Guess you like

Origin blog.csdn.net/m0_37816922/article/details/133274659