В мире глубокого обучения 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!