Замена веса слоя с помощью torch.sparse тензоров - PullRequest
0 голосов
/ 16 апреля 2020

Допустим, у меня есть определенный слой C = nn.Conv2d(1,3,3, bias=False), ie, 1 входной канал, 3 выходных канала и размер ядра 3x3. Внутренний вес этого слоя, таким образом, представляет собой тензор формы (3,1,3,3); Я могу получить доступ к этому с C .weight.data. Теперь предположим, что этот внутренний вес очень редок; он полон нулей и имеет только несколько ненулевых значений. Я могу легко построить разреженный тензор из веса следующим образом:

idx = C.weight.data.nonzero().T
values = C.weight.data[C.weight.data!=0]
sp_T = torch.sparse.FloatTensor(idx, values, C.weight.data.size())

Можно ли как-то сохранить веса слоя конвона как этот разреженный тензор? Я пытался просто сделать C.weight.data = sp_T, но выдает ошибку. Было бы очень удобно, если бы мы могли хранить все веса в модели таким разбросанным способом.

...