深度学习的预测建模是现在的开发人员必须要了解的一项技能。
PyTorch是由Facebook开发和维护的主要的开源深度学习框架。
PyTorch的核心是一个数学库,可让你在基于图形的模型上执行高效的计算和自动微分。直接实现这一点是具有挑战性的,尽管值得庆幸的是,现代的PyTorch API提供了类和习语,使你可以轻松开发一套深度学习模型。
在本教程中,你将找到在PyTorch中开发深度学习模型的分步指南。
完成本教程后,你将知道:Torch和PyTorch之间的区别以及如何安装和确认PyTorch是否正常工作;
PyTorch模型的五步生命周期以及如何定义,拟合和评估模型;
如何为回归,分类和预测建模任务开发PyTorch深度学习模型。
让我们开始吧:
PyTorch教程概述
本教程的重点是将PyTorch API用于常见的深度学习模型开发任务。在此,我们不会深入研究深度学习的数学和理论。
学习python深度学习的最好方法是实践,然后不断深入学习。看完本文后,你可以回头了解更多的理论。
我将每个代码示例设计为使用最佳实践,并且是独立的,以便你可以将其直接复制并粘贴到项目中,并使其适应你的特定需要。这将是一个很好的开始,而不是试图从官方文档单独找出API。
这是一个大型教程,因此分为三个部,他们是:
1.如何安装PyTorch?什么是Torch和PyTorch?
如何安装PyTorch?
如何确认已安装好的PyTorch?
2.PyTorch深度学习模型生命周期步骤第一步:准备资料步骤
第二步:定义模型步骤
第三步:训练模型步骤
第四步:评估模型步骤
第五步:做出预测
3.如何开发PyTorch深度学习模型?如何开发用于二进制分类的MLP
如何开发用于多类分类的MLP
如何为回归开发MLP
如何开发用于图像分类的CNN
你可以使用Python进行深度学习!
最多需要60分钟,你就能学习完成本教程!
你不需要了解所有内容(至少现在还不了解)。你的目标是端对端地完成本教程并获得结果,你无需在第一遍就了解所有内容。如果你在学习中遇到了很多问题,可以参考官方API文档,以了解你需要用到的功能。
你不需要先了解数学。数学是描述算法工作方式的一种紧凑方式,特别是线性代数,概率和微积分的工具。这些并不是你可以用来学习算法工作方式的唯一工具。你还可以使用代码并探索具有不同输入和输出的算法行为。了解数学不会告诉你选择哪种算法或如何对其进行最佳配置。你只能通过精心控制的实验来发现这一点。
你不需知道算法的工作原理。了解限制以及如何配置深度学习算法非常重要。但是学习算法可能会在以后出现。你需要在很长一段时间内慢慢地建立这种算法知识。今天,从熟悉该平台开始。
你不需成为Python程序员。如果你是Python语言的新手,它的语法可能很直观。就像其他语言一样,专注于函数调用(例如function())和赋值(例如a =“ b”)。这将为你提供大部分帮助。你是开发人员,你知道如何快速掌握语言的基础知识。
你不需成为深度学习专家。你可以了解各种算法的优点和局限性,并且可以阅读大量教程来深入学习深度学习项目的步骤。
1.如何安装PyTorch
在本节中,您将发现什么是PyTorch,如何安装以及如何确认PyTorch已正确安装。
1.1.什么是Torch和PyTorch?
PyTorch是由Facebook开发和维护的用于深度学习的开源Python库。
该项目于2016年开始,并迅速成为开发人员和研究人员的流行框架。
Torch(Torch7)是一个用C编写的用于深度学习的开源项目,通常通过Lua界面使用。这是PyTorch的前期项目,不再积极开发。PyTorch 在名称中包含“ Torch ”,以“ Py ”前缀表示先前的炬管库,该前缀表示新项目的Python焦点。
PyTorch API简单灵活,使其成为学者和研究人员在开发新的深度学习模型和应用程序时的最爱。广泛使用已导致针对特定应用程序(例如文本,计算机视觉和音频数据)进行了许多扩展,并且可能预先训练了可直接使用的模型。因此,它可能是学者使用的最受欢迎的库。
PyTorch的灵活性是以易用性为代价,特别是对于初学者来说,相比于诸如简化接口Keras。选择使用PyTorch而不是Keras会放弃一些易用性,更陡峭的学习曲线以及更多的代码以提供更大的灵活性,并且可能会使学术界更加活跃。
1.2.如何安装PyTorch
在安装PyTorch之前,请确保已安装Python,例如Python 3.6或更高版本。
如果你没有安装Python,则可以使用Anaconda安装它。本教程将向你展示如何:如何使用Anaconda设置Python环境进行机器学习
有很多方法可以安装PyTorch开源深度学习库。
在你的工作站上安装PyTorch的最常见,也许是最简单的方法是使用pip。
例如,在命令行上,你可以输入:
sudo pip install torch
深度学习最流行的应用也许是用于计算机视觉,而PyTorch计算机视觉软件包被称为“ torchvision”。
强烈建议安装torchvision,它可以按以下方式安装:
sudo pip install torchvision
如果您更喜欢使用特定于平台或软件包管理器的安装方法,则可以在下方链接查看安装说明的完整列表:
现在无需设置GPU。
本教程中的所有示例都可以在现代CPU上正常工作,如果要为GPU配置PyTorch,则可以在完成本教程后进行操作。
1.3.如何确认已安装PyTorch
一旦安装了PyTorch,重要的是确认该库已成功安装并且可以开始使用它。
不要跳过此步骤。
如果未正确安装PyTorch或在此步骤上引发错误,则以后将无法运行示例。
创建一个名为versions.py的新文件,并将以下代码复制并粘贴到该文件中。
# 检查 pytorch 版本
import torch
print(torch.__version__)
保存文件,然后打开命令行并将目录更改为保存文件的位置。
然后输入:
python versions.py
然后,你应该看到如下输出:
1.3.1
这确认PyTorch已正确安装,并且我们都使用相同的版本。
这也向你展示了如何从命令行运行Python脚本,我建议以这种方式从命令行运行所有代码,而不是从笔记本或IDE运行。
2. PyTorch深度学习模型生命周期
在本部分中,你将发现深度学习模型的生命周期以及可用于定义模型的PyTorch API。
模型具有生命周期,这一非常简单的知识为建模数据集和理解PyTorch API提供了基础。
生命周期中的五个步骤如下:1.准备数据。
2.定义模型。
3.训练模型。
4.评估模型。
5.做出预测。
让我们依次仔细研究每个步骤。
注意:这是最简单,最常见或最惯用的方法,此外,还有很多其他方法可以使用PyTorch API来完成每个步骤。
步骤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模型的示例。
# model definition
class MLP(Module):
# define model elements
def __init__(self, n_inputs):
super(MLP, self).__init__()
self.layer = Linear(n_inputs, 1)
self.activation = Sigmoid()
# forward propagate input
def forward(self, X):
X = self.layer(X)
X = self.activation(X)
return X
给定图层的权重也可以在构造函数中定义该图层之后进行初始化。
常见示例包括Xavier和He权重初始化方案。例如:
...
xavier_uniform_(self.layer.weight)
步骤3:训练模型
训练过程要求您定义损失函数和优化算法。
常见的损失函数包括:BCELoss:二进制分类的二进制交叉熵损失。
CrossEntropyLoss:用于多类分类的分类交叉熵损失。
MSELoss:回归的均方损失。
有关一般损失函数的更多信息,可通过下方链接查看:
随机梯度下降用于优化,标准算法由SGD类提供,尽管该算法的其他版本也可用,例如Adam。
# define the optimization
criterion =