Tips:附件
计算准确率:
accuracy = (outputs.argmax(1) == targers).sum()/test_data_size,outputs为输出1. 导包
import torchimport torchvisionfrom torch.utils.data import DataLoaderfrom torch import nnfrom torch.nn import Conv2d, MaxPool2d, Flatten, Linearfrom tensorboardX import SummaryWriter
2. 数据集
train_data = torchvision.datasets.CIFAR10("./dataset", train = True,download = False,transform = torchvision.transforms.ToTensor())test_data = torchvision.datasets.CIFAR10("./dataset", train = False,download = False,transform = torchvision.transforms.ToTensor())
3. 数据加载
train_data_size = len(train_data)# 测试集大小test_data_size = len(test_data)train_loader = DataLoader(train_data, batch_size=64)test_loader = DataLoader(test_data, batch_size = 64)
4. 模型定义
class Classify(nn.Module):def __init__(self):super().__init__()self.model1 = nn.Sequential(Conv2d(3, 32, 5, padding=2, stride=1),MaxPool2d(2),Conv2d(32,32,5, padding=2, stride=1),MaxPool2d(2),Conv2d(32, 64, 5, padding=2 ,stride=1),MaxPool2d(2),Flatten(),Linear(1024,64),Linear(64,10))def forward(self,x):return self.model1(x)
5. 优化器和损失计算
model = Classify()# 计算损失loss_fn = nn.CrossEntropyLoss()# 学习率learning_rate = 1e-2# 优化器optim = torch.optim.SGD(model.parameters(), lr = learning_rate)
6. 参数设置
# 设置参数# 训练次数total_train_step = 0# 测试次数total_test_step = 0# 训练轮数epoch = 4
7. 训练and可视化
```python writer = SummaryWriter(“logs”) for i in range(epoch): print(“————————第{}轮训练”.format(i+1))
model.train()只对特定层起作用,例如deopout层,batchnorm层
model.train() for idx, data in enumerate(train_loader):
imgs, targers = dataoutputs = model(imgs)# 计算损失loss = loss_fn(outputs, targers)# 梯度清零optim.zero_grad()# 反向传播loss.backward()# 更新梯度optim.step()total_train_step = total_train_step + 1if idx % 100 == 0:writer.add_scalar("train_loss_4",loss.item(),idx )print("训练次数为:{},loss为{}".format(idx + 1,loss))
测试阶段
model.eval()只对特定层起作用,例如deopout层,batchnorm层
model.eval()
测试集损失
total_test_loss = 0
正确率总和
total_accuracy = 0 with torch.no_grad():
for idx, data in enumerate(test_loader):imgs, targers = dataoutputs = model(imgs)loss = loss_fn(outputs, targers)total_test_loss = total_test_loss + loss# 计算正确率accuracy = (outputs.argmax(1) == targers).sum()# 准确率求和total_accuracy = total_accuracy + accuracy
print(“整体测试集上的loss为:{}”.format(total_test_loss)) print(“整体测试集上的正确率为:{}”.format(total_accuracy/test_data_size)) writer.add_scalar(“test_loss_4”, total_test_loss.item(),total_test_step) writer.add_scalar(“test_accurary_4”,total_accuracy/test_data_size, total_test_step) total_test_step = total_test_step + 1
torch.save(model, “model_{}.pth”.format(i)) print(“模型已保存!”) writer.close()
```
