利用MATLAB做一维数据的CNN分类 问题及解决方法
我在做一维CNN分类时参考了知乎凉拌西红柿答主的程序示例,根据其代码改编实现了CNN分类。
其中遇到的问题与解决方法总结如下:
1. 数据维度转换问题
for i = 1 : 1 : 3000
for j = 1 : 1 : 72
Xtrain(1, j, 1, i)=data(i, j); % 输入数据维度转化
end
end
程序说明:
(1)需要进行分类的数据data是3000*72维的,则可通过下面的代码转换成Xtrain作为CNN的输入。
(2)可以理解为,“3000”对应数据量(条),“72”对应样本点数。
(3)对于有时间序列,如信号,也可以根据上述方式转换维度,不会影响数据的时间关联性。
(4)Xtrain的4D维度是为了适应图像输入格式。4个参数分别代表图像的(长,宽,通道数,样本量)。
2.训练准确率一直在50%左右
可能存在的问题:
(1)网络结构不合理——>增加卷积层数。
答主给出的程序里CNN只有2个卷积层,层数太少,可能不适用于某些数据。我参考了VGG16的网络结构(有13个卷积层),增加卷积层数后,训练准确率有所上升。
(2)训练时epoch数太少,网络还没收敛就停止了训练。——>增加epoch
我第一次训练时epoch数设置为4,网络达到epoch数后就停止了,所以没收敛,训练准确率一直在50%左右波动。后面把‘options’里的“MaxEpochs”改成了50,训练一段时间后准确率就开始上升了。