Глубокое обучение с PyTorch | Введение

Опубликовано: 25 Июля, 2021

PyTorch во многих отношениях ведет себя как массивы, которые нам нравятся от Numpy. В конце концов, эти массивы Numpy - всего лишь тензоры. PyTorch берет эти тензоры и упрощает их перенос на графические процессоры для более быстрой обработки, необходимой при обучении нейронных сетей. Он также предоставляет модуль, который автоматически вычисляет градиенты (для обратного распространения ошибки), и еще один модуль, специально предназначенный для построения нейронных сетей. В целом PyTorch оказывается более гибким с Python и стеком Numpy по сравнению с TensorFlow и другими фреймворками.

Нейронные сети:
Глубокое обучение основано на искусственных нейронных сетях, которые в той или иной форме существуют с конца 1950-х годов. Сети построены из отдельных частей, приближенных к нейронам, обычно называемых единицами или просто «нейронами». Каждый блок имеет некоторое количество взвешенных входов. Эти взвешенные входные данные суммируются (линейная комбинация), а затем передаются через функцию активации для получения выходного сигнала устройства.
Ниже приведен пример простой нейронной сети.

Тензоры:
Оказывается, нейросетевые вычисления - это просто набор операций линейной алгебры над тензорами, которые являются обобщением матриц. Вектор - это одномерный тензор, матрица - это двумерный тензор, массив с тремя индексами - это трехмерный тензор. Фундаментальной структурой данных для нейронных сетей являются тензоры, а PyTorch построен на основе тензоров.

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




# First, import PyTorch
import torch

Определите функцию активации (сигмоид) для вычисления линейного выхода




def activation(x):
""" Sigmoid activation function
Arguments
---------
x: torch.Tensor
"""
return 1 / ( 1 + torch.exp( - x))




# Generate some data
# Features are 3 random normal variables
features = torch.randn(( 1 , 5 ))
# True weights for our data, random normal variables again
weights = torch.randn_like(features)
# and a true bias term
bias = torch.randn(( 1 , 1 ))

features = torch.randn((1, 5)) creates a tensor with shape (1, 5), one row and five columns, that contains values randomly distributed according to the normal distribution with a mean of zero and standard deviation of one.

weights = torch.randn_like(features) creates another tensor with the same shape as features, again containing values from a normal distribution.

Finally, bias = torch.randn((1, 1)) creates a single value from a normal distribution.

Теперь мы вычисляем выход сети, используя умножение матриц.




y = activation(torch.mm(features, weights.view( 5 , 1 )) + bias)

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

Мы определяем структуру нейронной сети и инициализируем веса и смещения.




# Features are 3 random normal variables
features = torch.randn(( 1 , 3 ))
# Define the size of each layer in our network
# Number of input units, must match number of input features
n_input = features.shape[ 1 ]
n_hidden = 2 # Number of hidden units
n_output = 1 # Number of output units
# Weights for inputs to hidden layer
W1 = torch.randn(n_input, n_hidden)
# Weights for hidden layer to output layer
W2 = torch.randn(n_hidden, n_output)
# and bias terms for hidden and output layers
B1 = torch.randn(( 1 , n_hidden))
B2 = torch.randn(( 1 , n_output))

Теперь мы можем рассчитать выход для этой многоуровневой сети, используя веса W1 и W2 и смещения B1 и B2.




h = activation(torch.mm(features, W1) + B1)
output = activation(torch.mm(h, W2) + B2)
print (output)

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.