PyTorch 快速入门指南一、PyTorch 是什么PyTorch 是一个基于 Python 的深度学习框架由 Facebook AI Research 开发。它以动态计算图和直观的接口著称是研究和生产中最受欢迎的框架之一。二、环境安装# 基础安装CPU版本pipinstalltorch torchvision# GPU版本CUDA 11.8pipinstalltorch torchvision --index-url https://download.pytorch.org/whl/cu118# 验证安装python-cimport torch; print(torch.__version__); print(torch.cuda.is_available())三、核心概念快速掌握1. Tensor张量- 基础数据结构importtorch# 创建张量xtorch.tensor([1,2,3])# 从列表创建ytorch.zeros(2,3)# 2×3零矩阵ztorch.randn(3,4)# 3×4随机正态分布# 基本操作atorch.tensor([1,2,3])btorch.tensor([4,5,6])print(ab)# 逐元素相加print(a*2)# 标量乘法print(torch.matmul(a,b))# 矩阵乘法# GPU转移如果有GPUiftorch.cuda.is_available():devicetorch.device(cuda)x_gpux.to(device)2. 自动求导Autograd- 神经网络的核心# 创建需要梯度的张量xtorch.tensor(2.0,requires_gradTrue)ytorch.tensor(3.0,requires_gradTrue)# 计算zx**2y**3# 反向传播z.backward()print(x.grad)# dz/dx 2x 4.0print(y.grad)# dz/dy 3y² 27.0四、构建第一个神经网络1. 定义网络结构importtorch.nnasnnimporttorch.nn.functionalasFclassSimpleNN(nn.Module):def__init__(self):super().__init__()self.fc1nn.Linear(784,128)# 全连接层784输入→128输出self.fc2nn.Linear(128,64)self.fc3nn.Linear(64,10)# 10个类别输出defforward(self,x):xF.relu(self.fc1(x))# ReLU激活函数xF.relu(self.fc2(x))xself.fc3(x)# 最后一层不用激活returnx# 实例化模型modelSimpleNN()print(model)2. 损失函数和优化器importtorch.optimasoptim# 损失函数交叉熵损失适合分类问题criterionnn.CrossEntropyLoss()# 优化器随机梯度下降optimizeroptim.SGD(model.parameters(),lr0.01)# Adam优化器更常用optimizeroptim.Adam(model.parameters(),lr0.001)五、训练流程完整示例importtorchimporttorch.nnasnnimporttorch.optimasoptimfromtorch.utils.dataimportDataLoader,TensorDataset# 1. 准备模拟数据# 假设有1000个样本每个样本784维如28×28图像展开n_samples1000n_features784n_classes10# 生成随机数据Xtorch.randn(n_samples,n_features)ytorch.randint(0,n_classes,(n_samples,))# 创建数据集和数据加载器datasetTensorDataset(X,y)dataloaderDataLoader(dataset,batch_size32,shuffleTrue)# 2. 定义简单模型classClassifier(nn.Module):def__init__(self):super().__init__()self.netnn.Sequential(nn.Linear(784,256),nn.ReLU(),nn.Linear(256,128),nn.ReLU(),nn.Linear(128,10))defforward(self,x):returnself.net(x)modelClassifier()# 3. 设置训练组件criterionnn.CrossEntropyLoss()optimizeroptim.Adam(model.parameters(),lr0.001)# 4. 训练循环n_epochs5forepochinrange(n_epochs):total_loss0correct0total0forbatch_x,batch_yindataloader:# 前向传播outputsmodel(batch_x)losscriterion(outputs,batch_y)# 反向传播optimizer.zero_grad()# 清空梯度loss.backward()# 计算梯度optimizer.step()# 更新参数# 统计total_lossloss.item()_,predictedtorch.max(outputs,1)totalbatch_y.size(0)correct(predictedbatch_y).sum().item()# 打印每个epoch的结果accuracy100*correct/totalprint(fEpoch{epoch1}/{n_epochs}, fLoss:{total_loss/len(dataloader):.4f}, fAccuracy:{accuracy:.2f}%)# 5. 保存模型torch.save(model.state_dict(),model.pth)# 6. 加载模型推理时model_loadedClassifier()model_loaded.load_state_dict(torch.load(model.pth))model_loaded.eval()# 设置为评估模式六、常用工具和技巧1. 数据预处理fromtorchvisionimporttransforms# 图像预处理管道transformtransforms.Compose([transforms.Resize((224,224)),# 调整大小transforms.ToTensor(),# 转为Tensor [0,1]transforms.Normalize(# 标准化mean[0.485,0.456,0.406],std[0.229,0.224,0.225])])2. 设备管理devicetorch.device(cudaiftorch.cuda.is_available()elsecpu)modelmodel.to(device)# 模型移到设备datadata.to(device)# 数据移到设备3. 梯度管理# 梯度裁剪防止梯度爆炸torch.nn.utils.clip_grad_norm_(model.parameters(),max_norm1.0)# 冻结部分层forparaminmodel.fc1.parameters():param.requires_gradFalse# 不更新梯度七、下一步学习建议官方教程访问 https://pytorch.org/tutorials/实战项目MNIST手写数字识别CIFAR-10图像分类简单的情感分析关键模块torch.nn神经网络层torch.optim优化算法torch.utils.data数据加载torchvision视觉任务工具八、常见错误及解决# 错误1忘记清零梯度# optimizer.zero_grad() # 必须放在loss.backward()之前# 错误2训练/评估模式混淆model.train()# 训练时启用dropout等model.eval()# 评估时禁用dropout# 错误3维度不匹配# 使用 x.view() 或 x.reshape() 调整维度# x x.view(-1, 784) # 自动推断batch_size# 错误4GPU/CPU数据混用# 确保所有数据在同一个设备上记住实践是最好的学习方式。从这个小指南开始运行代码修改参数观察变化你就能快速掌握PyTorch的核心用法https://pytorch.org/