Pytorch实战系列6——代码结构及训练过程

1,240 阅读1分钟

数据集

深度学习中,算法的好坏是测试集的训练结果体现的,同时也在推动算法的更新迭代。

常用的数据集

参考链接:zhuanlan.zhihu.com/p/55775309

  1. Datafoundatin
  2. 科赛网
  3. Kaggle
  4. Google
  5. 微软数据集

构造模型

如果模型比较复杂,可以写在新的.py文件中,并在main文件中import该模型.py

# design model using class
class LogisticRegressionModel(torch.nn.Module):
    def __init__(self):
        super(LogisticRegressionModel, self).__init__()
        # 创建1 * 1维度对象
        self.linear = torch.nn.Linear(1, 1)

    def forward(self, x):
        # y_pred = F.sigmoid(self.linear(x))
        y_pred = torch.sigmoid(self.linear(x))
        return y_pred

# 创建对象model
model = LogisticRegressionModel()

损失函数

可以根据nn.Module模块,构造自己的损失函数

# 默认情况下,loss会基于element平均,如果size_average=False的话,loss会被累加。
# BCELoss二分类的交叉熵
criterion = torch.nn.BCELoss(size_average=False)

优化器

根据自己的使用情况及测试集反馈构造自己的优化器

optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

训练

根据训练前的平均损失MSE和训练若干epoch之后的平均损失做对比,汇聚成图表,可以观察到模型是否收敛(达到最优)或是过拟合。

过拟合

训练数据过多、模型过于复杂、测试样本过少,使得通过大量训练后的模型能够精准的预测测试样本的结果,而非正常路径的检测结果

# training cycle forward, backward, update
for epoch in range(1000):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    print(epoch, loss.item())

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()