Класс Linear
Класс Linear применяется для создания полносвязного слоя нейронной сети. Он выполняет линейное преобразование входных данных: y = xA^T + b. Первым параметром передаётся количество входных признаков in_features, вторым - количество выходных признаков out_features. Третьим параметром можно передать bias, который управляет использованием смещения (по умолчанию True).
Синтаксис
torch.nn.Linear(in_features, out_features, bias=True)
Пример
Давайте создадим линейный слой, преобразующий вектор из 5 признаков в вектор из 3 признаков, и применим его к случайному тензору:
import torch
torch.manual_seed(0)
layer = torch.nn.Linear(5, 3)
t = torch.randn(2, 5)
res = layer(t)
print(res)
Результат выполнения кода:
tensor([
[-0.2091, 0.4138, 0.3181],
[ 0.6639, -0.2638, -0.6696],
], grad_fn=<AddmmBackward0>)
Пример
Создадим линейный слой без смещения и применим его к пакету из трёх образцов:
import torch
torch.manual_seed(1)
layer = torch.nn.Linear(4, 2, bias=False)
t = torch.randn(3, 4)
res = layer(t)
print(res)
Результат выполнения кода:
tensor([
[ 0.4427, -0.3547],
[-0.3235, 0.3190],
[ 0.2401, -0.0513],
], grad_fn=<MmBackward0>)
Пример
Покажем, как получить доступ к весам и смещению слоя, а также изменить их значения:
import torch
torch.manual_seed(2)
layer = torch.nn.Linear(3, 2)
print("Weights shape:", layer.weight.shape)
print("Bias shape:", layer.bias.shape)
layer.weight.data.fill_(0.1)
layer.bias.data.fill_(0.0)
t = torch.tensor([[1.0, 2.0, 3.0]])
res = layer(t)
print(res)
Результат выполнения кода:
Weights shape: torch.Size([2, 3])
Bias shape: torch.Size([2])
tensor([[0.6000, 0.6000]], grad_fn=<AddmmBackward0>)
Смотрите также
-
класс
LazyLinear,
который создаёт линейный слой с отложенным определением размера входных признаков -
класс
Bilinear,
который выполняет билинейное преобразование двух входных тензоров -
класс
Identity,
который возвращает входной тензор без изменений -
класс
Flatten,
который преобразует многомерный тензор в плоский вектор