создайте линейную модель с фиксированными весами в Pytorch

#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. Большое спасибо!