Глубокое обучение с PyTorch | Введение
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. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.