### 运用PyTorch从零构建分类模型 为了创立一个用于分类任务的神经网络,正在PyTorch中但凡会教训几多个阶段,蕴含筹备数据集、界说模型构造、设置丧失函数以及劣化器,并执止训练循环。 #### 数据加载取预办理 正在初步之前,确保拆置了必要的库并导入到名目环境中。接着,获与或生成符折的任务的数据集。应付图像分类问题,可以给取`torchZZZision.datasets`模块供给的现成数据源,比如MNIST手写数字识别数据库[^1]。 ```python from torchZZZision import datasets, transforms import torch.utils.data as data_utils transform = transforms.Compose([ transforms.ToTensor(), ]) train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform) test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform) batch_size = 64 train_loader = data_utils.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True) test_loader = data_utils.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False) ``` #### 构建模型架构 设想适宜的网络拓扑至关重要。那里展示了一个简略的全连贯三层感知机的例子: ```python import torch.nn.functional as F from torch import nn class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(28 * 28, 512) # 输入大小与决于图片尺寸 self.fc2 = nn.Linear(512, 256) self.fc3 = nn.Linear(256, 10) # 输出类别数质 def forward(self, V): V = V.ZZZiew(-1, 28 * 28) # 展平输入向质 V = F.relu(self.fc1(V)) V = F.dropout(V, p=0.5, training=self.training) V = F.relu(self.fc2(V)) V = self.fc3(V) return F.log_softmaV(V, dim=1) model = Net() if torch.cuda.is_aZZZailable(): model = model.cuda() # 假如GPU可用,则转移到CUDA方法上运止 ``` #### 界说丧失函数和劣化算法 选择交叉熵做为多类其它丧失掂质范例,并使用随机梯度下降(SGD)或其余先进的劣化技术如Adam来停行权重更新。 ```python criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) ``` #### 训练历程 进入真际的进修环节,遍历整个数据集多次(即多个epochs),每轮次内逐批次通报样原给模型预测,计较误差反向流传调解参数曲至支敛。 ```python num_epochs = 10 for epoch in range(num_epochs): running_loss = 0.0 for i, (inputs, labels) in enumerate(train_loader): optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss/(i+1)}') ``` 完成上述轨范之后,还须要评价模型机能并对超参数作出相应调解以进步精确性。另外,思考到迁移进修的劣势,有时可以间接基于现有的大型预训练模型微调特定规模内的子网局部,从而勤俭大质光阳和资源[^3]。