Код: Выделить всё
import torch
import torch.nn.functional as F
class MyModel(torch.nn.Module):
def __init__(self, layers, activation_function):
super(MyModel, self).__init__()
self.layers = torch.nn.ModuleList(layers)
self.act_fun = activation_function
def forward(self, X):
output = X
for i, layer in enumerate(self.layers):
if i > 0:
# Normalize the weights
layer.weight.data = F.normalize(layer.weight, p=2, dim=1)
if i < len(self.layers) - 1:
output = self.act_fun(layer(output))
else:
output = layer(output)
return output.squeeze()
- Совместимость Autograd: напрямую изменяя Layer.weight.data, я обхожу автоград PyTorch система? Будет ли это препятствовать правильному вычислению градиентов во время обратного распространения ошибки?
- Правильные обновления градиента: будет ли нормализация веса учитываться при вызове loss.backward(), или мне нужно обработать это по-другому обеспечить правильное вычисление градиента?
- Рекомендации: существует ли рекомендуемый способ нормализации весов слоев во время обучения в PyTorch, который поддерживает совместимость с autograd и обеспечивает правильное обновление градиента?
Я читал, что изменение .data напрямую может вызвать проблемы с отслеживанием градиента, но я не уверен, как правильно реализовать нормализацию веса в этом контексте.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ypassing-a