В мире глубокого обучения PyTorch превратился в огромную библиотеку, которая быстро набирает популярность, даже бросая вызов давнему доминированию TensorFlow. Ходят слухи, что даже Google рассматривал возможность перехода с TensorFlow на PyTorch.

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

1. Тензоры: основная структура данных

В основе PyTorch лежит тензор, похожий на массив NumPy. Тензоры — это n-мерные структуры данных, которые позволяют проводить эффективные численные вычисления. Давайте создадим простой тензор с помощью PyTorch:

import torch

# Create a 1-dimensional tensor
a1 = torch.tensor([1, 2, 3])

# Create a 2-dimensional tensor
a2 = torch.tensor([[1, 2, 3], [4, 5, 6]])

# Create a 3-dimensional tensor
a3 = torch.tensor([[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
                   [[10, 11, 12], [13, 14, 15], [16, 17, 18]]])

2. Форма, размер и тип данных

Понимание формы, размера и типа данных тензоров имеет решающее значение для эффективного манипулирования. PyTorch предоставляет несколько атрибутов, которые помогут вам в этом:

  • shape: описывает текущую форму тензора.
  • size: общее количество элементов в тензоре.
  • dtype: указывает тип данных тензора.
print(a2.shape)  # Output: torch.Size([2, 3])
print(a2.size())  # Output: torch.Size([2, 3])
print(a2.dtype)  # Output: torch.int64

3. torch.ones() и torch.zeros()

Создание тензоров с определенными значениями является распространенным требованием. С PyTorch вы можете легко инициализировать тензоры единицами или нулями, используя следующие функции:

  • torch.ones(size): создает тензор указанного размера со всеми элементами, установленными на 1.
  • torch.zeros(size): создает тензор указанного размера со всеми элементами, установленными на 0.
# Create a tensor of shape (3, 2) with ones
ones = torch.ones((3, 2))
print(ones)

4. факел.arange()

Часто необходимо генерировать тензоры с равномерно распределенными значениями. PyTorch предлагает функцию torch.arange(), аналогичную функции arange() в NumPy. Вы можете указать значения запуска, остановки и шага для создания желаемого тензора.

# Create a tensor within the range of 0 to 10 with step 2
range_tensor = torch.arange(0, 10, 2)
print(range_tensor)

5. torch.rand() и torch.randn()

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

  • torch.rand(size): создает тензор указанного размера со значениями, выбранными из равномерного распределения от 0 до 1.
  • torch.randn(size): создает тензор указанного размера со значениями, выбранными из стандартного нормального распределения (среднее значение 0, стандартное отклонение 1).
# Create a random tensor with values between 0 and 1
random_tensor = torch.rand((2, 3))
print(random_tensor)

# Create a random tensor with values from a standard normal distribution
normal_tensor = torch.randn((2, 3))
print(normal_tensor)

6. torch.cat() и torch.stack()

Объединение нескольких тензоров является обычной операцией. PyTorch предоставляет две функции для объединения тензоров:

  • torch.cat(tensors, dim): объединяет тензоры по указанному измерению.
  • torch.stack(tensors, dim): суммирует тензоры по новому измерению.
# Concatenate tensors along dimension 0
concatenated_tensor = torch.cat([a1, a2.view(-1)])
print(concatenated_tensor)

# Stack tensors along a new dimension
stacked_tensor = torch.stack([a1, a2.view(-1)])
print(stacked_tensor)

7. факел.transpose()

Транспонирование тензоров позволяет менять их размерности. Функция torch.transpose() PyTorch позволяет легко транспонировать тензор.

# Transpose a tensor of shape (3, 2) to (2, 3)
transposed_tensor = torch.transpose(a2, 0, 1)
print(transposed_tensor)

8. Математические операции с тензорами

PyTorch предлагает богатый набор математических операций, оптимизированных для эффективных тензорных вычислений. Такие функции, как torch.sum(), torch.mean(), torch.max(), torch.min(), torch.std() и torch.var(), позволяют легко манипулировать тензорами.

# Calculate the mean of a tensor
mean_tensor = torch.mean(a2)
print(mean_tensor)

9. torch.reshape()

Изменение формы тензоров имеет решающее значение при работе с различными архитектурами нейронных сетей. Функция PyTorch torch.reshape() позволяет изменять форму тензора, сохраняя при этом его элементы.

# Reshape a tensor from (2, 3) to (3, 2)
reshaped_tensor = torch.reshape(a2, (3, 2))
print(reshaped_tensor)

10. Ускорение графического процессора с помощью torch.cuda()

PyTorch обеспечивает бесшовную интеграцию с графическими процессорами NVIDIA для ускоренных вычислений глубокого обучения. Вы можете использовать функции torch.cuda() для перемещения тензоров между CPU и GPU для повышения производительности.

# Move a tensor to the GPU
gpu_tensor = a2.to(torch.device("cuda"))
print(gpu_tensor)

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

В общем, давайте познакомимся с PyTorch!