Существует несколько способов построения нейронной сети с использованием PyTorch.
import torch
from torch import nn
import torch.nn.functional as F
class Network(nn.Module):
def __init__(self):
super().__init__()
# Inputs to hidden layer linear transformation
self.hidden = nn.Linear(784, 256)
# Output layer, 10 units - one for each digit
self.output = nn.Linear(256, 10)
def forward(self, x):
# Hidden layer with sigmoid activation
x = F.sigmoid(self.hidden(x))
# Output layer with softmax activation
x = F.softmax(self.output(x), dim=1)
return x
Этот класс Network
предназначен для обработки цифровых изображений. Последнее число для self.output
равно 10, что означает, что у нас будет 10 выходов, по 1 выходу на каждую цифру. Мы помещаем функцию от output
до softmax
для вычисления вероятностей классов, т.е. чтобы увидеть, какая цифра имеет наибольшую вероятность для определенного изображения цифры.
Причина, по которой мы добавили опцию dim=1
для softmax
, состоит в том, чтобы производить вычисления по столбцам, поэтому вероятностные суммы для каждой строки в сумме составят 1.
Пример:
>>> input = torch.tensor([[1., 2., 3.], [2., 1., 3.], [4., 2., 6.]])
>>> F.softmax(input, dim=1)
tensor([[0.0900, 0.2447, 0.6652],
[0.2447, 0.0900, 0.6652],
[0.1173, 0.0159, 0.8668]])
# dim=1, row sums add up to 1
>>> F.softmax(input, dim=0)
tensor([[0.0420, 0.4223, 0.0453],
[0.1142, 0.1554, 0.0453],
[0.8438, 0.4223, 0.9094]])
# dim=0, column sums add up to 1
Та же модель может быть построена с использованием nn.Sequential
:
# Hyperparameters for our network
input_size = 784
hidden_sizes = [128, 64]
output_size = 10
# Build a feed-forward network
model = nn.Sequential(nn.Linear(input_size, hidden_sizes[0]),
nn.ReLU(),
nn.Linear(hidden_sizes[0], hidden_sizes[1]),
nn.ReLU(),
nn.Linear(hidden_sizes[1], output_size),
nn.Softmax(dim=1))
Вы можете проверить страницу Gitub Udacity для глубокого обучения с PyTorch для более подробного объяснения. Приведенные выше примеры взяты из Часть 2 - Нейронные сети в PyTorch . Часть их содержания Deep Learning Nanodegree также доступна в виде бесплатного курса , введение в глубокое обучение с PyTorch .