pytorch自定义反向传播问题
相关代码:
criterion = torch.nn.MSELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(), lr=1e-4)
for t in range(500):
y_pred = model(x)
loss = criterion(y_pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(loss.detach().numpy())
以上代码为损失函数MSE,优化器为SGD,利用loss.backward()自动求导进行反向传播实现梯度下降求解。
损失函数可表述为:L = 1/N * ∑ (y_pred - y) **2
其梯度为:x.grad = 2/N * ∑(y_pred - y) * ∑ (y_pred)'
我想重写梯度求解的方法,就是不利用pytorch库里面的自动求导机制,而是用我自定义的函数去求梯度,
例如上述的梯度我想要重写为:x.grad = 2/N * ∑(y_pred - y)
要如何编写自定义的函数求梯度,才能
经过重写的自定义梯度求解后,放进神经网络里面也能正常迭代计算