@ptrblck thanks for the reply.
        loss.backward()
        print('loss Grad:' , loss.grad)

It returns None. Is it normal?
I checked it with a predefined loss function. Training loss value are decreasing as planned but loss.grad is still None.
Should I write .grad for the network model layers? I could not understand what all parameters mean.
Also, my dataset is small. 500 training, 250 validation and 250 test samples.
When I use the big dataset, the loss value still does not decrease.