![d27f9df9ccd28e442b26db0a4c03c5ab.png](https://i-blog.csdnimg.cn/blog_migrate/4c73bb0ec5e9474fc0e243cdda235b78.png)
这是一个入门机器学习和深度学习的小项目,以fashion-mnist数据为基础。分别利用机器学习(随机森林)和深度学习(多层感知机/卷积神经网络)方法进行训练。完整的包含数据读取,数据处理,训练, 验证,loss曲线的绘制,训练过程的可视化,模型推理,混淆矩阵的计算,特征图可视化等。因为最近总是会带一些学弟学妹入门,前段时间了解到这个数据集,感觉麻雀虽小五脏俱全,真的是一个很好的入门项目,把这一套搞明白了,做复杂的项目也都是水到渠成。于是乎花了点时间,找了些代码然后修改了一些,完善了很多的构件,这里当做一个记录吧!关于代码已经尽我所能的注释得很清楚了。完整的代码我已经上传github上面,并且readme里面会有使用方法:
DLLXW/Fashion-MNISTgithub.com![782609de8027815f1b3022d809f6779d.png](https://i-blog.csdnimg.cn/blog_migrate/97e2bf90511ec9878efeba114e4e53ee.png)
数据集介绍
Fashion-mnist可以看作经典MNIST数据的加强版,号称计算机视觉领域的Hello, World,这里暂不作过多介绍。下面是数据集的github链接:
zalandoresearch/fashion-mnistgithub.com![eecf0264e3281e024d411678ce44fbc0.png](https://i-blog.csdnimg.cn/blog_migrate/8799852dccc69b048f585cbece289688.png)
用于训练的图片有6w张,用于验证的图片有1w张,每一个样本是一张28x28像素的图像。总共10中服饰类别。所以问题是一个10分类的问题
![1c0b148327b2f1b81f4822e7c51038ea.png](https://i-blog.csdnimg.cn/blog_migrate/e1a8104959552dcb927d026bbce22170.png)
训练随机森林模型
首先利用机器学习方法来进行一下该分类任务,这里选取随机森林.
需要提前安装的库为:sklearn
准备数据:
事实上很多机器学习库都已经集成了该数据集,也就是说可以在代码里面直接导入,但这里推荐自己手动下载下来。到上面的github链接页面,找到:
![c738e9c853446706cdb862c5f3120ca8.png](https://i-blog.csdnimg.cn/blog_migrate/bdb167dca3af12353902bd2c143252d2.jpeg)
下载数据集并且解压到自己的目录下
譬如我的数据格式组织如下:
![10f8008754f942cbad10b1ade0cf59e4.png](https://i-blog.csdnimg.cn/blog_migrate/b3b352dfa93e3bb618adbdf2743d0980.png)
数据集都解压到了raw文件夹。下面是实现用随机森林训练,验证,并且打印多分类混淆矩阵和分类信息的代码。
import
这里稍微解释下多分类的混淆矩阵,对于二分类很好理解,多分类的混淆矩阵其实也是在二分类的基础上进行的,基本思想是:当研究其中的一类时,其余的各个类别都当做负类。
上面随机森林是一个经典的机器学习算法,以此作为例子对fashion-mnist数据集进行了分类。如果想换成其它的模型,也很容易,只需要简单的修改上面的几行代码。
Pytorch构建多层感知机和卷积神经网络进行分类
下面介绍一下如何构建一个多层的神经网络(多层感知机MLP)已经卷积神经网络来进行分类。这里用pytorch进行构建。这里给出的网络的构建代码,完整代码请参考github
#这里其实是构建一个最简单经典的神经网络
模型训练/验证
下面给出训练/验证部分代码,主要分为训练的参数设置;数据集加载;训练过程和验证过程;利用tensorboard实现训练过程的可视化,网络结构可视化等。
def
模型推理
首先说明说明叫推理(infer):前面我们已经训练好了模型,同时也已经保存好了我们的模型(xxx.pt)。同时我们还在训练的过程中就验证(测试)了我们的模型训练效果;现在我们有了一张新图片,需要送给模型,让模型判断是属于哪个类别,这个过程就叫做模型的infer。
所以推理的前提是需要从保存的模型里面加载模型,同时要注意的是我们之前保存的只是模型的权重,并未保存模型的结构,所以还得导入前面定义的模型结构,然后将这些权重附着在网络的结构(骨架)之上。
#
最后贴上一些模型训练可视化的效果图
![48da97be89353c0101921590b1b20c60.png](https://i-blog.csdnimg.cn/blog_migrate/98e61d28b2a12cd755559cae62a352ea.jpeg)
![0adec3950a86fb42544045cbd90ea0df.png](https://i-blog.csdnimg.cn/blog_migrate/20cea266a3eaeb3f892feead4e03f1e3.jpeg)
完整项目已经上传github
DLLXW/Fashion-MNISTgithub.com![e97d07c2e499142e7fbd6d3c6783a4e3.png](https://i-blog.csdnimg.cn/blog_migrate/072dbddef83634365bbc36fbaaec2e5d.png)
在readme里面有使用说明!!!希望大家素质三连