PyTorch流程简要总结

阿里云双11来了!从本博客参与阿里云,服务器最低只要86元/年!

简介

​ 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))

参考资料

https://www.jianshu.com/p/76268cdd2094

Python量化投资网携手4326手游为资深游戏玩家推荐:《进击的阿斯托拉:诺伦之秘下载

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
TensorFlow
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论