搭建网络模型的笔记

搭建网络模型

1. 导入模块

  • import 模块

2. 选择设备

  • device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

3. 准备数据集

  • 训练集:
    • train_data = torchvision.datasets.CIFAR10(root="./data_CIFAR10", train=True,transform=torchvision.transforms.ToTensor(),download=True)
  • 测试集:
    • test_data = torchvision.datasets.CIFAR10(root="./data_CIFAR10", train=False,transform=torchvision.transforms.ToTensor(),download=True)

4. 加载数据集

  • train_dataloader = DataLoader(train_data, batch_size=64)
  • test_dataloader = DataLoader(test_data, batch_size=64)

5. 创建网络模型

  • class MyModel(nn.Module):
    • def init(self):
      • xxxxxxx
      • xxxxxxx
    • def forward(self, x):
      • x = self.model1(x)
      • return x

6. 实例化网络模型

  • net_model = MyModel()
  • net_model = net_model.to(device)

7. 定义损失函数

  • loss_fn = nn.xxxxxxxLoss()
  • if torch.cuda.is_available():
    • loss_fn = loss_fn.cuda()

8. 定义优化器

  • optimizer = torch.optim.SGD(net_model.parameters(), lr=learning_rate)
  • optimizer = optim.SGD(net.parameters(), lr=opt.lr, momentum=0.9) # 选择优化器
  • scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1) # 设置学习率下降策略

9. 训练部分

  • for i in range(epoch):
    • 训练步骤

    • for data in train_dataloader:

      • 1.获取训练数据
      • imgs, targets = data
      • 2.选择设备
      • imgs = imgs.to(device)
      • 3.把图片传入网络模型进行训练,返回10个结果
      • targets = targets.to(device)
      • outputs = net_model(imgs)
      • 4.进行损失函数处理
      • loss = loss_fn(outputs, targets)
      • 5.梯度清零
      • optimizer.zero_grad()
      • 6.反向传播
      • loss.backward()
      • 7.优化器,更新权重
      • optimizer.step()
    • 测试步骤

    • with torch.no_grad():

      • for data in test_dataloader:
        • imgs, targets = data # 1.获取测试数据

        • imgs = imgs.to(device) # 2.选择设备

        • targets = targets.to(device)

        • outputs = net_model(imgs) # 3.将测试图片传入训练模型

        • loss = loss_fn(outputs, targets) # 4.计算损失值

        • total_test_loss = total_test_loss + loss.item() # 5.计算总的损失值

        • accuracy = (outputs.argmax(1) == targets).sum() # 6.计算准确率

        • total_accuarcy = total_accuarcy + accuracy # 7.计算总准确率

    • 保存训练好的模型

    • torch.save(net_model, "net_model{}.path".format(i))

10. 验证数据

  • 待验证图片预处理

    • 转换为和测试集相同格式的图片,输入为同类型
      1. 加载
    • transfrom = torchvision.transforms.Compose([torchvision.transforms.Resize((32, 32)),torchvision.transforms.ToTensor()])
    • image = transfrom(image)
      1. 转换
    • image = torch.reshape(image, (1, 3, 32, 32))
  • 加载保存的模型

    • model = torch.load("net_model25.path")
  • 验证

  • model.eval()

  • with torch.no_grad():

    • image = image.to(device)# 转换成相同类型数据集
    • output = model(image)
  • print(output)

  • print(output.argmax(1))

上一篇:tensorflow2.4.0 在CUDA11.1中出现'libcusolver.so.10'问题


下一篇:Poj 2993 Emag eht htiw Em Pleh