Допустим, у меня есть определенный слой 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
, но выдает ошибку. Было бы очень удобно, если бы мы могли хранить все веса в модели таким разбросанным способом.