Hi all,
I’m calculating the scatter-matrix for the output of the network, the output shape like this
batch_size=100
features=1000
tensor(100, 1000)
In the middle of calculation, I create a new tensor (that requires grad) to be added later to another tensor (requires grad).
The code works fine when I create the new tensor like this
S_w= torch.zeros((d,d),requires_grad=True).cuda()

but I want to create it in an elegant and safe way to be part of the graph not a leaf variable that can be created on CPU to have an option to move it or not to the CPU.
Here is my code snippet:
…
S_w= torch.zeros((d,d),requires_grad=True).cuda()   // Want to creat this in proper way

S_w +=lamb* torch.eye(*S_w.size(),out=torch.empty_like(S_w)) //Want to creat  the other tensor and add it in a proper way

for cl in range (C):
    Sc= torch.matmul(normalized_feat_for_each_class_tensor[y==cl].T,
                      normalized_feat_for_each_class_tensor[y==cl])

    Nc=torch.tensor(normalized_feat_for_each_class_tensor[y==cl].shape[0],dtype=torch.float32)
    S_w +=Sc/(Nc-1)/C   

…