# How to calculate the Jacobian matrix of a neural network?

How to calculate the Jacobian matrix of a neural network?

Yes,I tried, but it seems run as I get the gradient all zero

And my network Is just a single fullly connected network, no non-linear activation function, so I think the gradient should not change when the input change. It seems the gradient is changing as the input change.

Could you share a small snippet that shows this? It seems to not give all zeros for me:

``````net = nn.Sequential(
nn.AvgPool2d(2),
nn.Flatten(1),
nn.Linear(16*4*4//4, 10)
)
input = torch.randn(1, 3, 4, 4)

tensor([[[[[[-6.3562e-03, -1.0175e-02, -2.5312e-02, -1.1178e-02],
[-1.4468e-02,  1.4982e-04, -7.6495e-03, -8.9791e-04],
[-1.8474e-02, -2.5984e-02, -2.6214e-02,  8.7420e-03],
[-6.6065e-03, -1.8409e-02, -6.9709e-03,  1.7825e-02]],
...
``````

http://211.81.52.14:8888/notebooks/jupyter/Untitled2.ipynb
hello,sir, can you open this link

hello,sir, This one

I don’t think you’re passing the right inputs to it.

``````func = lambda *params: model(data)
jacs = F.jacobian(func, params)
``````

It should be this:

``````jacs = F.jacobian(model, data)
``````

I am confused why the different input get different gradient, as you know, The network is a single fully-connected neural network. y=W*x+b, so when calculate dy/dx, we are supposed to get W. W should not change when x is changing.

The gradient of the network means dy/dw, not dy/dx.

so how to calculate the dy/dx