PyTorch 是一个基于 Python 构建的深度学习库。它为深度学习研究人员和开发者提供了 GPU 加速、动态计算图以及直观的接口。PyTorch 遵循“define-by-run”(定义即运行)的方法,这意味着它的计算图是即时构建的,从而允许更好的调试和模型定制。
PyTorch 的主要特性
- 它使用动态图,允许在模型执行和调试中具有灵活性。
- 它提供了一个自动微分引擎,简化了深度学习中的梯度计算。
- 它支持 CUDA,允许在 GPU 上高效执行计算。
!What-is-PytorchPytorch
我们可以在 Windows、macOS 和 Linux 上使用 pip 为 CPU(不带 GPU)安装 PyTorch:
> !pip install torch torchvision torchaudio
PyTorch 张量 (Tensors)
张量 (Tensors) 是 PyTorch 中的基本数据结构,类似于 NumPy 数组,但具有 GPU 加速功能。PyTorch 张量支持自动微分,使其适用于深度学习任务。
Python
CODEBLOCK_16f83e08
输出:
!pytorchOutput
张量运算
Python
CODEBLOCK_e496d55e
输出:
!pytorchOutput
张量的重塑与转置
Python
CODEBLOCK_66484b3a
输出:
!pytorchOutput
Autograd 和计算图
autograd 模块自动计算反向传播的梯度。这对于训练深度神经网络至关重要。
Python
CODEBLOCK_53820a76
输出:
> tensor(4.)
PyTorch 动态创建一个计算图,用于跟踪操作并为反向传播计算梯度。
在 PyTorch 中构建神经网络
!pytorch-workflowPytorch Workflow
在 PyTorch 中,我们使用 torch.nn 模块构建神经网络,其中:
- nn.Linear(infeatures, outfeatures) 定义一个全连接(密集)层。
- 激活函数,如 torch.relu、torch.sigmoid 或 torch.softmax,应用在层与层之间。
- forward() 方法定义数据如何在网络中传输。
要在 PyTorch 中构建神经网络,我们创建一个继承自 torch.nn.Module 的类,并定义其层和前向传播。
Python
CODEBLOCK_ad790eef
输出:
!pytorchOutput
定义损失函数和优化器
一旦定义了我们的模型,我们需要指定:
- 一个损失函数来度量误差。
- 一个优化器,根据计算出的梯度更新权重。
我们使用 nn.BCELoss() 作为二元交叉熵损失,并使用 optim.Adam() 作为 Adam 优化器,以结合动量和自适应学习率的优点。
Python
CODEBLOCK_01271a40
训练模型
训练过程包括生成虚拟数据(100个样本,每个有10个特征)。之后,我们运行一个训练循环,在其中我们:
- optimizer.zero_grad() 清除上一步累积的梯度。
- 前向传播 (model(inputs)) 将输入传入模型以生成预测。
- 计算损失 (criterion(outputs, targets)) 计算预测值与真实值之间的差异。