本文共 1969 字,大约阅读时间需要 6 分钟。
PyTorch Autograd (自动求导机制)
PyTorch 的 Autograd 库是训练神经网络时反向误差传播 (Backpropagation, BP) 算法的核心。在本文中,我们将通过 logistic 回归模型来理解 PyTorch 的自动求导机制。首先,我们将介绍与求导相关的 tensor 属性;其次,通过 logistic 回归模型来阐述前向传播和反向传播的过程。
Tensor Attributes Related to Derivation
在 PyTorch 中, tensor 对求导支持多种属性和操作。以下是一些关键属性和操作:
Build Logistic Regression Model
假设有以下损失函数:
[ z = w_1x_1 + w_2x_2 + b ]
[ y_p = \text{sigmoid}(z) ]
[ \text{Loss}(y_p, y_t) = -\frac{1}{n}\sum_{i=1}^n (y_t \log(y_p) + (1-y_t)\log(1-y_p)) ]
通过上述模型,我们可以构建一个简单的计算图:
在反向传播过程中,我们需要计算损失函数对权值参数 w1、w2 和阈值参数 b 的梯度,以便使用 SGD 等优化算法进行参数更新。
PyTorch 实现
以下是使用 PyTorch 实现 logistic 回归模型的代码示例:
import torchimport numpy as npx_t, y_t = torch.tensor([[1, 1], [1, 0], [0, 1], [0, 0]], requires_grad=False, dtype=torch.float)y_t = torch.tensor([[0], [1], [0], [1]], requires_grad=False, dtype=torch.float)w = torch.randn([2, 1], requires_grad=True, dtype=torch.float)b = torch.zeros(1, requires_grad=True, dtype=torch.float)def logistic_model(x_t): a = torch.matmul(x_t, w) + b return torch.sigmoid(a)y_p = logistic_model(x_t)def get_loss(y_p, y_t): return -torch.mean(y_t * torch.log(y_p) + (1 - y_t) * torch.log(1 - y_p))loss = get_loss(y_p, y_t)loss.backward()w.grad.zero_()b.grad.zero_()w.data -= 1e-2 * w.grad.datab.data -= 1e-2 * b.grad.dataprint(f"epoch: {e}, loss: {loss.item()}")print(w)print(b) 代码解释:
运行代码后,我们可以观察到损失值随着迭代逐步下降,模型性能逐步提升。
转载地址:http://yqvez.baihongyu.com/