动手学深度学习(pytorc版)
https://github.com/ShusenTang/Dive-into-DL-PyTorch
# 检查 pytorch 版本
import torch
print(torch.__version__)
模型具有生命周期,这一非常简单的知识为建模数据集和理解PyTorch API提供了基础。
生命周期中的五个步骤如下:
1.准备数据。
2.定义模型。
3.训练模型。
4.评估模型。
5.做出预测。
步骤1:准备资料
第一步是加载并准备数据。
神经网络模型需要数字输入数据和数字输出数据。
你可以使用标准的Python库来加载和准备表格数据,例如CSV文件。例如,Pandas可用于加载CSV文件,而scikit-learn的工具可用于编码分类数据,例如类标签。
PyTorch提供了Dataset类,你可以扩展该类并对其进行自定义以加载数据集。
例如,你的数据集对象的构造函数可以加载你的数据文件(例如CSV文件)。然后,你可以覆盖用于获取数据集长度(行或样本数)的__len __()函数,以及用于通过索引获取特定样本的__getitem __()函数。
加载数据集时,你还可以执行任何必需的转换,例如缩放或编码。
下面提供了自定义数据集类的框架。
# dataset definition
class CSVDataset(Dataset):
# load the dataset
def __init__(self, path):
# store the inputs and outputs
self.X = ...
self.y = ...
# number of rows in the dataset
def __len__(self):
return len(self.X)
# get a row at an index
def __getitem__(self, idx):
return [self.X[idx], self.y[idx]]
加载后,PyTorch将提供DataLoader类以在模型的训练和评估期间导航数据集实例。
可以为训练数据集,测试数据集甚至验证数据集创建一个DataLoader实例。
所述random_split()函数可以被用于将数据集分裂成训练集和测试集。拆分后,可以将数据集中的行的选择以及批处理大小以及是否应在每个时期重新整理数据,提供给DataLoader。
例如,我们可以通过传入数据集中行的选定样本来定义DataLoader。
...
# create the dataset
dataset = CSVDataset(...)
# select rows from the dataset
train, test = random_split(dataset, [[...], [...]])
# create a data loader for train and test sets
train_dl = DataLoader(train, batch_size=32, shuffle=True)
test_dl = DataLoader(test, batch_size=1024, shuffle=False)
定义后,就可以枚举DataLoader,每次迭代产生一批样品。
...
# train the model
for i, (inputs, targets) in enumerate(train_dl):
...
步骤2:定义模型
下一步是定义模型。
在PyTorch中定义模型的习惯用法涉及定义扩展Module类的类。
您的类的构造函数定义模型的各层,而forward()函数则是重写,它定义了如何通过模型的已定义各层转发输入。
许多层是可用的,诸如线性为完全连接层,Conv2d卷积层,并且MaxPool2d为汇集层。
激活函数也可以定义为层,例如ReLU,Softmax和Sigmoid。
下面是一个具有一层的简单MLP模型的示例。