问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

深度学习之模型训练套路:以识别猫狗图片为例

创作时间:
作者:
@小白创作中心

深度学习之模型训练套路:以识别猫狗图片为例

引用
1
来源
1.
https://www.bilibili.com/read/cv35385945

深度学习在图像分类、自然语言处理等领域取得了显著成果。对于初学者而言,掌握模型训练的基本流程至关重要。本文以识别猫狗图片为例,详细介绍了深度学习模型训练的四个主要步骤:数据准备、模型搭建、损失函数设计和参数更新,并提供了完整的PyTorch代码示例。

一、引言

近年来,大量的深度学习(Deep Learning)算法在诸多实际应用中获得了优越的性能,例如计算机视觉的图像分类,自然语言处理的机器翻译,医学影像分析以及智能推荐系统等。然而,对于大多数刚刚接触深度学习领域的初学者而言,如何系统地、公式化地训练一个深度学习模型往往成为一个难题。因此,本文面向深度学习初学者,以识别猫狗图片为例,详细讲解深度学习算法的工作流程,并结合相关代码,旨在使每一个深度学习初学者掌握如何系统地训练一个深度学习模型。

注:本文使用的深度学习框架为PyTorch,所涉及到的相关函数或者模块请大家另行查询学习。

二、模型训练基本流程

首先,让我们大致认识一下训练模型包含哪些步骤。训练一个深度学习模型可以简单地分为如下四个步骤:

2.1 准备数据集

深度学习是数据驱动的,其成功离不开海量数据的支撑。深度学习的精髓在于能够通过不断地从数据中总结规律、提取经验,从而调整自身的参数。因此,为了成功地训练一个深度学习模型,我们必须事先收集准备大量的数据,称为数据集(dataset)。它们可以是带有标签(label)的,用于有监督学习;也可以是不带标签的,用于无监督学习。

2.2 搭建模型

深度学习的一个难点在于模型/算法的设计。起初,最简单的深度学习模型称为感知机(Multi-Layer Perceptron,MLP),它能够处理一维的数据。后来,为了处理类似图像这样的二维数据,计算机视觉领域中的卷积神经网络(Convolutional Neural Networks, CNN)应运而生。代表性的网络包括LeNet、AlexNet、VGGNet、Resnet、GoogLenet等等。为了处理非欧式数据(图数据),图神经网络(Graph Neural Networks,GNN)应运而生。

绝大多数深度学习研究者都致力于设计更高效、更合理、更具可解释性的新型深度学习模型,以更好地解决各种领域的各种下游任务。

2.3 设计损失函数

深度学习以某个指标为线索寻找最优权重参数,这个指标就是损失函数。损失函数越小,深度学习的模型越好。常见的损失函数包括均方误差函数(Mean-Square Error, MSE)、交叉熵损失函数(Cross-Entropy Loss Function)等。

2.4 更新模型参数

所谓模型的训练、模型的学习,训练的是什么?学习的又是什么?简单而言,即基于损失函数,从数据中调整模型的参数(weight)。常用的模型优化算法包括随机梯度下降(Stochastic Gradient Descent,SGD)、动量法(momentum)、Adam等。

三、代码示例

在了解了训练流程之后,让我们以计算机视觉中的一个常见任务——图片分类为例(猫狗图片分类),结合详细的代码,更加深入地掌握如何训练一个深度学习模型。

首先,我们来看一下项目文件的总体结构是怎样的,如下图所示:

在PyCharm IDE中是长这样的:

接下来,我们以主函数train.py为切入点,详细介绍各个文件的作用以及模型训练的各个步骤。

3.1 初始化工作

train文件首先分别执行了一些初始化工作,如下图所示。包括指定训练设备、指定配置文件路径、加载配置文件、显示配置、创建日志记录器。其中,show_config函数和LossHistory类在utils文件夹的utils文件中分别被定义。

配置文件config.json的内容如下图所示。包括数据集、模型、优化器和训练过程的相关设置

3.2 加载数据集

接着,我们将执行模型训练的第一步:准备数据集。这部分的代码如下图所示:

其中,train_transform和test_transform定义了如何对数据进行预处理。load_my_dataset函数如下图所示:

其中,read_split_data函数返回训练集和测试集所有图片的路径和标签。My_dataset类的定义如下:

3.3 搭建模型

然后,我们执行模型训练的第二步:搭建模型。我们通过调用get_model函数返回一个模型,具体使用何种模型视情况而定。在此,我们直接调用已有的Resnet18卷积神经网络,并在其后连接一个全连接层,从而将一张图片映射为一个标量。

3.4 设计损失函数

在定义损失函数之前,我们首先定义优化模型所使用的优化器:

对于二分类任务,我们可以直接使用现成的二元交叉熵损失函数:

3.5 更新模型参数

最后,我们执行模型训练的第四步:更新模型参数。我将这部分定义为一个train函数:

训练的一个迭代过程(epoch)如下:

在训练过程中,利用日志记录器记录训练误差、准确率等信息:

在训练过程中,每隔一定的迭代轮次,自动保存模型参数:

四、训练结果

训练过程如下图所示:

通过测试脚本predict.py随机测试一张图片:

五、总结

本文介绍了训练深度学习模型的基本流程,并以具体的计算机视觉中的图片分类任务为例,结合详细的代码,演示了如何训练一个深度学习模型以识别猫狗图片。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号