Setup:

I have a matrix of weights, a lot of which are originally 0. I do not want these weights to change.

As I understand, if I use these weights as follows:

```
output = torch.sum(torch.addmm(biases, weights, inputs))
output.backward()
optim.step()
```

Then the weights which were initially 0 can become non-zero.

However, I do not want this happening. Can I use a sparse matrix to represent the weights and force it to ignore gradients for zero-valued elements so that they never become non-zero?

Additionally:

```
RuntimeError: set_indices_and_values_unsafe is not allowed on a Tensor created from .data or .detach().
If your intent is to change the metadata of a Tensor (such as sizes / strides / storage / storage_offset)
without autograd tracking the change, remove the .data / .detach() call and wrap the change in a `with torch.no_grad():` block.
```

seems to be coming up whenever I try to update the weights in my sparse matrix for the second time. Does this mean we’re not allowed to backprop through and update sparse matrices?