In the below code, could you clarify why are calculating dLdN when you are not using in subsequent calculations dLdS = np.ones_like(S) dSdN = deriv(sigma, N) **dLdN = dLdS * dSdN** dNdX = np.transpose(W, (1, 0)) dLdX = np.dot(dSdN, dNdX) return dLdX