HoRain云--Python深度学习实战:PyTorch基础与项目
PyTorch是深度学习研究和应用的主流框架。本文从张量操作到神经网络训练带你入门PyTorch。一、张量基础python复制下载import torch a torch.tensor([1, 2, 3]) b torch.randn(3, 4) c torch.zeros(2, 3) d torch.ones(2, 3) print(a 1) print(torch.matmul(b, b.T)) print(a.cuda() if torch.cuda.is_available() else a)二、自动求导python复制下载x torch.tensor(2.0, requires_gradTrue) y x ** 2 3 * x 1 y.backward() print(x.grad) # 2*x3 7三、构建神经网络python复制下载import torch.nn as nn import torch.nn.functional as F class Net(nn.Module): def __init__(self): super().__init__() self.fc1 nn.Linear(784, 256) self.fc2 nn.Linear(256, 128) self.fc3 nn.Linear(128, 10) self.dropout nn.Dropout(0.2) def forward(self, x): x x.view(x.size(0), -1) x F.relu(self.fc1(x)) x self.dropout(x) x F.relu(self.fc2(x)) x self.fc3(x) return x四、训练循环python复制下载from torch.utils.data import DataLoader from torchvision import datasets, transforms transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) train_set datasets.MNIST(root./data, trainTrue, downloadTrue, transformtransform) train_loader DataLoader(train_set, batch_size64, shuffleTrue) device torch.device(cuda if torch.cuda.is_available() else cpu) model Net().to(device) optimizer torch.optim.Adam(model.parameters(), lr1e-3) criterion nn.CrossEntropyLoss() for epoch in range(5): model.train() total_loss 0 for images, labels in train_loader: images, labels images.to(device), labels.to(device) optimizer.zero_grad() outputs model(images) loss criterion(outputs, labels) loss.backward() optimizer.step() total_loss loss.item() print(fEpoch {epoch1}, Loss: {total_loss/len(train_loader):.4f})五、模型评估python复制下载model.eval() correct 0 total 0 with torch.no_grad(): for images, labels in test_loader: images, labels images.to(device), labels.to(device) outputs model(images) _, predicted torch.max(outputs, 1) total labels.size(0) correct (predicted labels).sum().item() print(fAccuracy: {correct/total:.4f})六、保存与加载python复制下载torch.save(model.state_dict(), model.pth) model.load_state_dict(torch.load(model.pth))七、实战CIFAR-10图像分类使用CNNpython复制下载class CNN(nn.Module): def __init__(self): super().__init__() self.conv1 nn.Conv2d(3, 32, 3, padding1) self.conv2 nn.Conv2d(32, 64, 3, padding1) self.pool nn.MaxPool2d(2, 2) self.fc1 nn.Linear(64 * 8 * 8, 256) self.fc2 nn.Linear(256, 10) def forward(self, x): x self.pool(F.relu(self.conv1(x))) x self.pool(F.relu(self.conv2(x))) x x.view(x.size(0), -1) x F.relu(self.fc1(x)) x self.fc2(x) return x八、总结PyTorch动态图灵活易调试。掌握张量、自动求导、nn.Module、训练循环即可开展深度学习项目。