Рубрики
Без рубрики

Pytorch :: Понимание тензоров (часть 2)

Привет друзья, с новым годом Пока что вы поняли типы и формы тензоров. В … с меткой глубокого обучения, Python, Pytorch, нейронных сетей.

Глубокое обучение с Pytorch (4 части серии)

Привет друзья, с новым годом

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

Я создал это как часть-2, так как вся информация в одном посте была длительной: P

Оглавление

  1. Индексирование и нарезка тензоров
  2. Арифметические операции на тензорах
  3. Основные функции на тензорах
  4. Операции на 2D Tensors

Индексирование и нарезка тензоров

Индивидуальные значения тензоров также являются тензором, например

import torch

t1 = torch.tensor([1, 2, 3, 4])
print(t1[0])
tensor(1)

Поскольку исходный тензор был 1-D, значение, конечно, будет, конечно, тензором 0-D. Итак, если у вас есть 2-D Tensor, и делаете, используя только один индекс, вы получите 1-D Tensor

import torch

t2 = torch.tensor([[1, 2, 3, 4], [5, 6, 7, 8]])
print(t2[0])
tensor([1, 2, 3, 4])

ПРИМЕЧАНИЕ: Если вы хотите получить список RAW Python Of 1+ D Tensors, вы можете использовать Tensor.Tolist () метод

Как и нормальный список, вы также можете обновить ценность тензора, просто доступ к индексу. Например

t1[2] = 100
print(t1)
tensor([1, 2, 100, 4])

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

Арифметические операции на тензорах

Очень основные операции на тензорах – это Векторные добавления и вычитания Отказ Посетите ссылку, если вы хотите изучить математику за этими векторными операциями

Предположим, у вас есть два тензора U U U и U U U определяется как

u = torch.tensor([1.0, 2.0])
v = torch.tensor([3.0, 4.0])

print(u)
print(v)
tensor([1., 2.])
tensor([3., 4.])

Тогда векторные операции добавление и вычитание соответственно

print(u + v)
print(u - v)
tensor([4., 6.])
tensor([-2., -2.])

Скалярные операции также поддерживаются. Например, принимая 5 5 5 Как наше скалярное количество

ws = torch.tensor(5)
print(ws)
tensor(5)

Операции Дополнение , вычитание , Умножение и разделение показаны соответственно

print(u + v + ws)
print(u + v - ws)
print(u + v * ws)
print(u + (v / ws))
tensor([ 9., 11.])
tensor([-1.,  1.])
tensor([16., 22.])
tensor([1.6000, 2.8000])

В Pyyorch не нужна необходимость создания тензора 0D для выполнения скалярных операций, вы можете просто использовать скалярное значение и выполнить действие. Например,

print(v * 5)
tensor([15., 20.])

Кросс-продукт довольно короткий и простой, используя * символ. Но чтобы выполнить точечный продукт, вы должны использовать torch.dot (вектор1, вектор2) или Tensor.dot (вектор2)

print(u * v)
print(torch.dot(u, v))
print(u.dot(v))
tensor([3., 8.])
tensor(11.)
tensor(11.)

Примечание При выполнении кросс-продукта или точечного продукта Размеры обеих тензоров должны быть равны иначе вы получите Ошибка выполнения

Основные функции на тензорах

Тензуры для факела обеспечивают множество функций, которые вы можете применить на тензорах для желаемых результатов. Первый из всех – Tensor.mean ()

x = torch.tensor([1, 2, 3, 4, 5], dtype=torch.float32)
print(x)
print(x.mean())
tensor([1., 2., 3., 4., 5.])
x.mean()

Примечание Поскольку среднее тензора будет плавающим тензором, вы можете найти среднее значение для плавающего тензора, только иначе вы получите Ошибка выполнения

Найти максимальное или минимальное значение в тензоре можно сделать с помощью Tensor.max () и Tensor.min () соответственно

print(x.max())
print(x.min())
tensor(5.)
tensor(1.)

Вы также можете применить функцию на Tensor-элемент-мудрый. Предположим, у вас есть тензор, содержащий различные значения PI И вы хотите применить функцию греха и COS на нем. Вы можете использовать Torich.sin (тензор) и Torch.cos (тензор)

import numpy as np

x = torch.tensor([0, np.pi / 2, np.pi])
print(x)
print(torch.sin(x))
print(torch.cos(x))
tensor([0.0000, 1.5708, 3.1416])
tensor([ 0.0000e+00,  1.0000e+00, -8.7423e-08])
tensor([ 1.0000e+00, -4.3711e-08, -1.0000e+00])

Иногда вам придется получить равномерно разнесенный список номеров между диапазоном, вы можете использовать torch.linspace (начать, конец, [шаг])

Давайте сделаем его более интерактивным путем построения греха ( π ) \ sin (- \ pi) греха ( Π ) к греха ( Π ) \ sin (\ pi) греха ( π ) и COS ( π ) \ cos (- \ pi) COS ( π ) к COS ( Π ) \ cos (\ pi) COS ( π )

Сделать набор данных сначала,

pi = torch.linspace(-np.pi/2, np.pi/2, steps=1000)
print(pi[:5])  # lower bound
print(pi[-5:]) # upper bound

sined = torch.sin(pi)
cosed = torch.cos(pi)
print(sined[0:5])
print(cosed[0:5])
tensor([-1.5708, -1.5677, -1.5645, -1.5614, -1.5582])
tensor([1.5582, 1.5614, 1.5645, 1.5677, 1.5708])
tensor([-1.0000, -1.0000, -1.0000, -1.0000, -0.9999])
tensor([-4.3711e-08,  3.1447e-03,  6.2894e-03,  9.4340e-03,  1.2579e-02])

Теперь используя MATPLOTLIB для создания графика

import matplotlib.pyplot as plt

plt.plot(sined, label="sined")
plt.plot(cosed, label="cosed")
plt.legend()
plt.show()

Операции на 2D Tensors

Изображения Greyscale являются лучшим примером 2D тензоров. Каждый пиксель, который вы видите как W Я D T H * H свидетельствовать i g H T ширина высота w i D T H * H свидетельствовать i g h T являются C О л S * R О W S Cols * Rows CO л S * к W S для матрицы.

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

На всякий случай, если вам интересно, как изображено цветное изображение RGB, оно в основном это тензор 3D, где есть 3 матрицы для каждого канала R, G и B. Например

Создание случайного 2D тензор, используя torch.rand (* размер) метод.

ПРИМЕЧАНИЕ: Это общий метод, вы можете создать случайного тензора любого измерения, используя этот метод

t2 = torch.rand((3, 3))
print(t2)
print(t2.ndim)   # dimension of matrix is also called rank of matrix
print(t2.shape)
print(t2.numel())
tensor([[0.0376, 0.4297, 0.2987],
        [0.8009, 0.1815, 0.5538],
        [0.2482, 0.7099, 0.3132]])
2
torch.Size([3, 3])
9

Tensor.numel () Используемый выше метод возвращает общее количество элементов в тензоре

Индексирование и нарезка работает так же, как 1D Tensor, но есть незначительное изменение. В 1D вы были использованы для использования [Number_Start: Number_end] для нарезки и [индекс] Для получения элемента на определенный индекс.

Вот теперь у вас есть строки и столбцы, поэтому синтаксис будет [index_row, index_col] Чтобы получить конкретный элемент на строке и столбце в матрице и [Number_start_row: numbers_end_row, numbers_start_col: numbers_end_row] Отказ

print(t2[0, 0])
print(t2[1, 1])
tensor(0.0376)
tensor(0.1815)

Приведенный выше код даст вам самый первый и средний элемент из матрицы. Как показано в следующей матрице

Получение элемента с индексацией всегда даст вам новый тензор 0D

t2[1:2, 1:]
tensor([[0.1815, 0.5538]])

Для выполнения умножения матрицы вы можете использовать любой из них: Tensor.matmul (Tensor2) , Torch.matmul (Tensor1, Tensor2) , Tensor.mm (Tensor2) или torch.mm (tensor1, tensor2)

x = torch.rand((3, 4))
y = torch.rand((4, 3))
print(x)
print(y)

print(x.matmul(y))
print(torch.mm(x, y))
tensor([[0.6413, 0.1338, 0.5066, 0.1618],
        [0.3807, 0.8555, 0.2187, 0.5024],
        [0.2771, 0.6381, 0.5671, 0.6934]])
tensor([[0.0263, 0.9461, 0.6314],
        [0.9180, 0.1586, 0.2589],
        [0.3363, 0.4529, 0.9433],
        [0.6760, 0.8877, 0.1171]])
tensor([[0.4195, 1.0009, 0.9363],
        [1.2086, 1.0409, 0.7270],
        [1.2525, 1.2358, 0.9563]])
tensor([[0.4195, 1.0009, 0.9363],
        [1.2086, 1.0409, 0.7270],
        [1.2525, 1.2358, 0.9563]])

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

Глубокое обучение с Pytorch (4 части серии)

Оригинал: “https://dev.to/tbhaxor/pytorch-understanding-tensors-part-2-4bfc”