Обучение прекращается, когда вы умножаете веса слоя на скаляр?Python

Программы на Python
Anonymous
Обучение прекращается, когда вы умножаете веса слоя на скаляр?

Сообщение Anonymous »

Я пытаюсь реализовать разреженно связанные весовые матрицы для моей простой трехслойной модели с прямой связью. Для этого я реализовал маску для каждого из моих слоев с определенным процентом нулей, идея заключалась в том, что я хотел бы обнулять один и тот же набор весов после каждого шага оптимизатора, чтобы мои слои не были полностью связаны. Но у меня с этим проблемы, потому что, когда я выполняю поэлементное умножение маски на весовые матрицы, веса перестают меняться при последующих обратных проходах. Чтобы проверить, не является ли моя маска причиной проблемы, я просто умножил свои весовые матрицы на скаляр 1,0, и это воссоздало проблему. Что здесь может происходить? Я проверил, и градиенты все еще рассчитываются. Просто потери больше не уменьшаются и веса не меняются. Выполняет ли это умножение какое-то отключение весов от графика?
Моя модель:
class TSP(nn.Module):

def __init__(self, input_size, hidden_size):
super(TSP, self).__init__()
self.sc1 = nn.Linear(input_size, hidden_size)
self.sc2 = nn.Linear(hidden_size, input_size)

torch.nn.init.normal_(self.sc1.weight, mean=0, std=0.1)
torch.nn.init.normal_(self.sc2.weight, mean=0, std=0.1)

def forward(self, x):
x = torch.relu(self.sc1(x))
x = (self.sc2(x))
return x

def predict_hidden(self, x):
x = torch.relu(self.sc1(x))
return x


Чтобы воссоздать эту проблему, все, что нужно, — это следующее, и веса перестанут обновляться:
model.sc1.weight = nn.Parameter(1. * model.sc1.weight)
model.sc2.weight = nn.Parameter(1. * model.sc2.weight)


Подробнее здесь: https://stackoverflow.com/questions/786 ... h-a-scalar

Вернуться в «Python»