最近正式开始学习深度学习,而作为现在最流行的深度学习框架PyTorch,相信使用过的人都会被其轻便和快速等特点深深吸引,因此这个系列博客介绍了如何快速入门PyTorch。
学习一门新的语言或者框架最快速的方法自然是边看代码边看教程,于是我遍寻GitHub,终于找到了一个既简单又详细的PyTorch入门教程。该教程提供了完整的代码并添加了详细的注释,一步步循循善诱的引导读者快速入门PyTorch。但教程中有一些错误而且是全英文注释,因此我将此教程进行了翻译并重新整理,更详细的添加了自己理解的一些内容。最后我将原教程进行分拆,主要分为了8个内容,意图引导Pytorch初学者能够快速的入门,对Pytorch的基本操作有个全面的了解。
本教程代码地址及需要的数据集
链接:https://pan.baidu.com/s/1CiZwfWrZqZSdx1c4MSaIHQ 密码:0izy
一、准备
在进入本教程前,需要有一些基本准备工作。
- 熟悉python,尤其要熟悉Numpy和Pandas库的使用;
- 最好有一些软件开发经验,如果有良好的编程背景,就能够很好的入门;
- 安装含有Python 3.x的Anaconda和Jupyter notebook;
- 最好有Nvidia GPU(比如GTX 1080),如果没有也没关系,但训练时间会变长。当然你也可以在网上租用服务器或者远程GPU服务器;
- 读者应该对深度学习和神经网络的一些基本概念比较熟悉。比如线性函数,非线性函数(Relu等),反向传播,梯度和梯度下降算法,损失函数,以及神经网络的权重怎么更新。对于CNN来说,应了解基本的卷积和池化操作。我们的教程将覆盖Pytorch张量(Tensor),张量操作,以及迁移学习和Pytorch相关的所有概念。
二、Pytorch介绍
Pytorch是来自Facebook的一种相对比较新的深度学习框架,已经快速的在开发社区中流行开来。它的主要优点是它的灵活性和神经网络运行时更好的控制能力。另一个关键优势是它广泛使用了Python的编程习惯,入门比较简单,而不像Tensorflow定义了自己的语法和编程风格。
三、数据集
我们使用Cifar10数据集。该数据集包含了60000张图片,被分成10类。每张图片大小是28x28。由于这些图片比较小,较为模糊,导致成为分类任务中比较困难的数据集之一。该数据集的一些基准:
https://benchmarks.ai/cifar-10
有一个2014年的Cifar10竞赛,在
https://www.kaggle.com/c/cifar-10
四、目标
在学完该教程后,读者应该能够:
- 使用Pytorch创建一个API(一组类和实用函数),来预处理和准备用于训练,验证和预测的图像数据集;
- 构造并使用API有效地将Pytorch中的迁移学习应用于图像数据集进行分类;
- 获取一些技巧,使用三种不同的预训练模型,通过有效地组合它们来实现比单个模型更高的精度,从而在Cifar10获得非常高的精度;
- 了解如何使用Pytorch为深度学习任务创建自己的类,并将它们用作其他应用程序的组件。
五、教程大纲
本教程将按以下步骤进行:
- 创建Cifar10 Pytorch数据集;
- 数据集预处理,准备训练;
- 创建一个基类来构建一个基本的神经网络;
- 创建一个派生自基类的全连接类;
- 创建一个派生自基类的迁移学习类;
- 在Cifar10数据集上训练两个不同的预训练迁移模型;
- 使用单个模型和集成模型在数据集上进行验证,预测;
- 在Kaggle给出的更大的测试集进行预测。
注意:接下来所有代码都在jupyter notebook中运行