学完了深度学习的理论和框架,接下来就是实践啦!相信大家在实践的时候都会去找各种的项目,本文是kaggle上面的一个深度学习小项目,目的是实现人脸表情的分类。接下来我将具体讲解实现过程,相信你只要学了深度学习的理论知识,对pytorch框架有所了解,就能够看得懂。话不多说,开讲!
深度学习首先要做的就是准备数据集,本项目的数据集可以直接从kaggle上面下载,附上链接(FER-2013数据集)。数据集由训练集和测试集组成,训练集包含28709张人脸图片,按照不同表情分为愤怒,厌恶,恐惧,快乐,悲伤,惊讶,中性七个类别,放在不同的文件夹中。测试集包含3589图片,也一样的分好类放在不同的文件夹中,其中每张图片都是48*48像素的灰度图像。
数据集准备好之后,接下来开始搭建模型。众所周知,深度学习分为模型,学习准则,优化算法三个模块,后面我会一一介绍。本文分别用FNN(前馈神经网络),CNN(卷积神经网络)进行了项目的实现,先介绍FNN。
第一步,导包,这里我们要用到四个包,后面用的时候再详细介绍。
import torch # 导入pytorch
from torch.utils.data import DataLoader # 加载数据集的包
from torchvision import transforms # 对数据进行处理
from torchvision.datasets import ImageFolder # 按文件夹对自动给图片打标签
深度学习在实现过程中,无非就是四个步骤,导入数据集、搭建训练模型、训练、测试。首先讲第一步:前面已经下载好了数据集,我们要把train和test数据集放在pycharm创建的project同一个文件夹里面,方便训练的时候导入数据。用transforms准备两个数据处理器,一个用来处理训练集,一个用来处理测试集,两个处理器的配置不一样。transforms在处理图像的时候,可以对图像进行翻转,旋转,缩放,裁剪等操作,所以可以用来对训练集进行数据增强,防止过拟合,而测试集不需要做数据增强,所以对两个数据集的处理器配置要不一样。对训练集本人加了翻转和旋转操作,当然读者也可以做别的数据增强,具体的可以去看transforms的使用。
TrainTransforms = transforms.Compose([transforms.RandomHorizontalFlip(p=0.5), # 以0.5的概率随机翻转
transforms.RandomRotation((-10, 10)), # 在(-10,10)度的范围内旋转
transforms.Grayscale(num_output_channels=1), # 参数为1表示转换为灰度图像
transforms.ToTensor(), # 把图像转化为张量
transforms.Normalize(0.5, 0.5)]) # 归一化,参数为均值和方差
TestTransforms = transforms.Compose([transforms.Grayscale(num_output_channels=1),
transforms.ToTensor(),
transforms.Normalize(0.5, 0.5)])
配置好了数据处理器之后,接下来就是要加载数据集,这里我们要用到DataLoader模块。但是在加载数据集之前,我们还有一个工作,我们下载下来的图片都是没有标签的,不像手写数字集MINST那样每张图片都进行了标注,这里只是按照不同的类别将人脸表情图像放在了不同的文件夹中而已。所以,我们在加载数据集之前必须要对图片进行标注。这里有一个很方便的模块叫做ImageFolder,可以按照文件夹顺序给文件夹中的每张图片进行标注,例如angry中的每张图片都标注为0,disgust中的图片都为1。
给数据打好标签之后,我们把它放入Data

本文介绍了如何使用PyTorch实现基于FNN和CNN的人脸表情分类项目,数据集来源于Kaggle的FER-2013。文章详细讲解了数据预处理、模型构建、训练与测试的步骤,包括数据增强、模型结构、损失函数和优化算法的选择。实验结果显示,CNN相比FNN在精度上有显著提升,但整体精度受限于数据集特性及样本数量。
最低0.47元/天 解锁文章
1万+





