#python #neural-network #pytorch
Вопрос:
Я хочу создать линейную сеть с одним слоем под PyTorch, но я хочу, чтобы веса были инициализированы вручную и оставались фиксированными.
Например, значения весов с моделью:
layer = nn.Linear(4, 1, bias=False)
weights = tensor([[ 0.6],
[0.25],
[ 0.1],
[0.05]], dtype=torch.float64)
Достижимо ли это? Если да, то как я могу это сделать? Или есть альтернативная линейная функция?
Ответ №1:
Вы можете заморозить свой слой, установив requires_grad
значение False
:
layer.requires_grad_(False)
Таким образом, градиенты layer
параметров не будут вычисляться.
Или путем прямого определения so при инициализации параметра:
layer = nn.Linear(4, 1, bias=False)
layer.weight = nn.Parameter(weights, requires_grad=False)
В качестве альтернативы, учитывая x
форму входных (n, 4)
данных , вы можете вычислить результат с помощью простого матричного умножения следующим образом:
>>> x@weights
# equivalent to torch.matmul(x, weights)
Комментарии:
1. а для инициализации весов? должен ли я выполнять инициализацию внутри класса? потому что у меня есть модель, состоящая из нескольких архитектур… для второго решения ? какова необходимая форма матрицы весов ?
2. Вы можете выбрать одно из двух, предполагая, что вы определили
weights
, как вы это сделали в вопросе выше.3. Большое спасибо!