美文网首页
PyTorch流程简要总结

PyTorch流程简要总结

作者: 乔咏田 | 来源:发表于2019-10-30 09:37 被阅读0次

    简介

    ​ PyTorch提供的autogard包,可以根据输入和前馈过程自动构建计算图,并执行反向传播。这里简要介绍一下PyTorch的简要流程。

    流程

    1、构造数据

    - 构造合适的数据集,训练集(train)与测试集(test)。
    - 数据读取可以使用torch的数据读取工具`torch.utils.data.DataLoader`。
    
    train_iter = torch.utils.data.DataLoader(mnist_train, batch_size=batch_size, shuffle=True, num_workers=num_workers)
      test_iter = torch.utils.data.DataLoader(mnist_test, batch_size=batch_size, shuffle=False, num_workers=num_workers)
    

    2、定义模型结构

    • 继承Modoule类来构造模型。
    • 如果没有特殊的梯度计算需求,模型中不需要自己定义反向传播backward函数。
    class MLP(nn.Module):
        # 声明带有模型参数的层,这里声明了两个全连接层
        def __init__(self, **kwargs):
            # 调用MLP父类Module的构造函数来进行必要的初始化。这样在构造实例时还可以指定其他函数
            super(MLP, self).__init__(**kwargs)
            self.hidden = nn.Linear(784, 256) # 隐藏层
            self.act = nn.ReLU()
            self.output = nn.Linear(256, 10)  # 输出层
          
        # 定义模型的前向计算,即如何根据输入x计算返回所需要的模型输出
        def forward(self, x):
            a = self.act(self.hidden(x))
            return self.output(a)
    

    3、定义损失函数

    • 如无特殊需求,直接使用torch的损失函数即可。
    # 分类问题
    loss = torch.nn.CrossEntropyLoss()
    # 回归问题
    loss = torch.nn.MSELoss()
    

    4、定义优化算法

    # 初始化模型
    net = MLP()
    # 定义优化算法
    optimizer = torch.optim.Adam(net.parameters())
    

    5、构造评测函数

    # 例如
    def evaluate_accuracy(data_iter, net):
      acc_sum, n = 0.0, 0
      for X, y in data_iter:
        acc_sum += (net(X).argmax(dim=1) == y).float().sum().item()
        n += y.shape[0]
      return acc_sum / n
    

    6、模型训练

    # epoch迭代
    for epoch in range(num_epochs):
        train_l_sum, train_acc_sum, n = 0.0, 0.0, 0
        for X, y in train_iter:
          # 利用构造的网络,对X进行计算预测,得到y_hat
          y_hat = net(X)
          # 通过y_hat与测试集中的y,进行loss计算
          l = loss(y_hat, y).sum()
          # 梯度清零,防止梯度进行累加计算
          optimizer.zero_grad()
          # 反向传播
          l.backward()
          # 梯度自动计算
          optimizer.step()
          train_l_sum += l.item()
          # 按指定的维度返回最大元素的坐标
          train_acc_sum += (y_hat.argmax(dim=1) == y).sum().item()
          n += y.shape[0]
        # 可在模型训练时,在每个epoch中,增加提前停止early stop的判别。
        test_acc = evaluate_accuracy(test_iter, net)
        print('epoch %d, loss %.4f, train acc %.3f, test acc %.3f'
              % (epoch + 1, train_l_sum / n, train_acc_sum / n, test_acc))
    

    参考资料

    相关文章

      网友评论

          本文标题:PyTorch流程简要总结

          本文链接:https://www.haomeiwen.com/subject/zlznvctx.html