I have a model in pytorch. The model can take any shape but lets assume this is the model
torch_model = Sequential(
Flatten(),
Linear(28 * 28, 256),
Dropout(.4),
ReLU(),
BatchNorm1d(256),
ReLU(),
Linear(256, 128),
Dropout(.4),
ReLU(),
BatchNorm1d(128),
ReLU(),
Linear(128, 10),
Softmax()
)
I am using SGD optimizer, I want to set the gradient for each of the layers so the SGD algorithm will move the parameters in the direction I want.
Lets say I want all the gradients for all the layers to be ones (torch.ones_like(gradient_shape)
) how can I do this?
Thanks?
In PyTorch, with a model defined as yours above, you can iterate over the layers like this:
You have to add the
[1:]
since the first module returned is the sequential module itself. In any layer, you can access the weights withlayer.weight
. However, it is important to remember that some layers, like Flatten and Dropout, don't have weights. A way to check, and then add 1 to each weight would be:I tested the above on your model and it does add 1 to every weight. Worth noting that it won't work without
torch.no_grad()
as you don't want pytorch tracking the changes.