WIFI信号状态信息 CSI 深度学习篇之CNN(Matlab)

本系列先前的博客中,从硬件配置开始,收集了CSI数据并进行了一系列处理,最终将信号数据转化为图像数据,也即信号识别问题转变为图像分类问题,从而能引入在图像处理领域已经非常成熟丰富的各类深度学习算法。

本博客是一篇新手导向的CNN处理CSI图像帧教程,从前述教程中所得到的图像帧数据集为开始,进行图像分类任务的训练,适合非计算机科班学生。使用的平台为Matlab,借助其深度学习工具箱,可以做到不需要写一行代码也能进行深度学习训练。

软件方面,需要新一点的Matlab版本,我所使用的为Matlab R2022a。

硬件方面,和大多数深度学习一样,显卡越新、显存越大越好,台式比笔记本好,因为同等配置台式显卡性能释放更好,具体要达到什么水平,视你所拥有的数据集复杂程度而言;我的数据集约有5万张图片,6GB RTX 2060的笔记本勉强也能跑,但是比较耗时。

1、为Matlab安装Deep Learning Toolbox

参考下述博客:

Matlab 安装 Deep Learning Toolbox_matlab deep learning toolbox安装-CSDN博客

安装好后在命令行窗口键入:deepNetworkDesigner

会弹出初始选择网络结构的页面

2、选择并微调预训练的CNN网络

在Matlab的深度网络设计器中,图像网络这一栏所列出的都是比较成熟、知名的图神经网络,理论上都可以用来训练你的数据集,但是不同网络效果差别会很大,可以挨个尝试一下。

右下角的黄色感叹号,表示你还没有下载这些网络,使用前需要去啊官网下载。以GoogLeNet Network为例:

Deep Learning Toolbox Model for GoogLeNet Network - File Exchange - MATLAB Central (mathworks.cn)

下载好后把文件拖到Matlab右边的运行文件夹中,双击文件,就会弹出附加文件管理器。过程需要Matlab账号(不是刚需正版的意思,只需要有账号),安装会比较慢。

以VGG-16为例,选择后页面如下所示:

这个深度网络设计器页面的左边,是组成神经网络的常见单元(输入、卷积、全连接等),中间是Resnet 18的网络结构,因为是选择既有的网络模型,所以就不需要自己从新开始架构。如果有自己改进的需要,就可以通过这个页面对神经网络的架构进行调整。这里我们就使用Resnet 18,但是需要根据我们自己的数据集维度以及分类数量,对原始网络的输入输出进行调整。

例如,我的图像帧大小是500 x 90 x 1,分类数量为9,就需要把input层替换为新的(因为无法单独对既有网络单元进行编辑,只能删掉换新的),把输入图像尺寸换成所训练数据集的维度;同时,第一个卷积层也需要修改,因为这是预训练好的模型,已经有了权重,而我们的图像帧是黑白图像而不是彩色图像,只有单通道,为了让网络重新训练并适配我们的数据集,需要更新第一个卷积层以重置其权重:

输出部分,需要替换最后一个全连接层以及最后的分类层,将全连接层的output size数量填写为目标分类数量,其他设置照搬原有设置就行;分类层只用替换,不需要修改设置,它会自动调整为契合全连接层的数量:

修改好后如果不确定,可以点上边栏的"分析",会对网络的合理性进行核对,如果有错误,就是网络有无法运行的问题:

3、导入数据集

在"设计器"中完成网络模型的调整后,接下来就是导入之前我们处理完毕的图像帧数据集。点击"数据",点击右上角"导入图像数据",弹出页面如下:

数据源有两种方式,一种是使用matlab的数据库类型,一种是直接从文件夹导入,后者更加直观(但是要求你的数据已经如前述教程,分门别类的放在不同的子文件夹中,如下图所示) ;选择数据集地址,增强选项可选可不选,个人认为对于信号图像数据,增强选项意义不大,自然图像猫猫狗狗什么的比较有用,也可以自己尝试;验证部分,设置从训练数据中拆分,免去了手动划分数据集,可以指定随机划分验证集的百分比,勾选随机化。设置完毕后,点击导入,Matlab会自动帮你处理所有数据集。

导入成功后就是如下所示页面,识别到了所有类别的文件夹及其图像帧数量:

4、配置深度学习训练

完成数据集导入后,点击"训练",点击右上角"训练选项",这一部分的配置就见仁见智,不同网络、不同数据集、不同任务所适用的训练参数可能都不一样,自己调试再找找深度学习超参数调整的教程看。Matlab给出的选项还是很丰富的,基础的设置像求解器类型、学习率、训练频次、批次大小都有,升级一点的操作像学习率梯度递减也支持,对于新手已经很够用了,还是以图像化界面的方式,不需要写代码。

这里不逐项解释,都是深度学习训练常见的名词和设置,详细了解右转ChatGPT,直接用默认配置训练。

5、深度学习训练进程

完成训练配置后,点击左上角"训练",便可开启训练进程,对此,Matlab给出了图像化的展示界面,可以实时观看网络在训练集和验证集上的表现。这个图象中,网络收敛进程就是正常的,右边显示训练时间和计划,由于我的笔记本性能很拉,训练得就慢。一个小tips,如果数据集量很大但是设备性能又有限,可以先摘取1/5或1/10跑着试试看,用于选取网络或者超参数调整。

训练完成后,可以点击左上角"导出",保存网络结构、训练好的模型等。

相关推荐
IT古董4 小时前
【机器学习】机器学习中用到的高等数学知识-8. 图论 (Graph Theory)
人工智能·机器学习·图论
Matlab精灵4 小时前
Matlab函数中的隐马尔可夫模型
开发语言·matlab·统计学习
余炜yw4 小时前
【LSTM实战】跨越千年,赋诗成文:用LSTM重现唐诗的韵律与情感
人工智能·rnn·深度学习
莫叫石榴姐5 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
96775 小时前
对抗样本存在的原因
深度学习
YRr YRr5 小时前
深度学习:神经网络中的损失函数的使用
人工智能·深度学习·神经网络
ChaseDreamRunner5 小时前
迁移学习理论与应用
人工智能·机器学习·迁移学习
静静的喝酒6 小时前
深度学习笔记之BERT(二)BERT精简变体:ALBERT
深度学习·bert·albert
麦麦大数据6 小时前
Python棉花病虫害图谱系统CNN识别+AI问答知识neo4j vue+flask深度学习神经网络可视化
人工智能·python·深度学习
谢眠7 小时前
深度学习day3-自动微分
python·深度学习·机器学习