Глубокое обучение с Pytorch (4 части серии)
Привет друзья, с новым годом
Пока что вы поняли типы и формы тензоров. В этом я пойду выше, кроме основы и научим вам еще несколько концепций о тензорах.
Я создал это как часть-2, так как вся информация в одном посте была длительной: P
Оглавление
- Индексирование и нарезка тензоров
- Арифметические операции на тензорах
- Основные функции на тензорах
- Операции на 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 = 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.])
Скалярные операции также поддерживаются. Например, принимая
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 (начать, конец, [шаг])
Давайте сделаем его более интерактивным путем построения
Сделать набор данных сначала,
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 тензоров. Каждый пиксель, который вы видите как
В приведенных выше изображениях показано, как двоичное изображение может быть представлено в матрице. В случае изображения серого, значение каждого элемента матрицы будет в диапазоне
На всякий случай, если вам интересно, как изображено цветное изображение 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. Если у вас есть сомнения или любая идея, достичь меня через следующие источники
- Электронная почта: tbhaxor@gmail.com. (Рекомендуемые)
- Twitter: @tbhaxor.
- GitHub: @tbhaxor.
- LinkedIn: @ Гуркират – сингх
- Instagram: @_tbhaxor_
Глубокое обучение с Pytorch (4 части серии)
Оригинал: “https://dev.to/tbhaxor/pytorch-understanding-tensors-part-2-4bfc”