基于卷积神经网络的多特征序列数据分类方法Matlab——附代码

目录

摘要:

传统卷积神经网络:

一维卷积神经网络:

网络的架构定义情况:

网络运行结果:

本文Matlab代码分享: 


摘要:

本文要用到的卷积神经网络(ConvolutionalNeural Network,CNN),主要包含卷积技术以及深度神经网络。区别传统的机器学习,卷积神经网络将特征提取器与机器学习有机的结合了起来。卷积神经网络处理的数据形式,具有局部与整体的关系,并且由低层次特征组合可以形成高层次的特征,还能得到不同特征间的空间相关性。

本文基于Matlab平台与自带的深度学习工具箱(Deep Learing toolbox),构建了一维卷积神经网络,实现多输入特征的一维向量分类任务。(以使用卷积神经网络对文本数据进行分类为参考示例)。代码注释详细,几乎每一行都有说明。

网络的输入为:输入N个特征的一维序列

网络的输出为:输出n类分类标签

传统卷积神经网络:

CNN的基本结构与普通神经网络类似,即基础单元均为具有学习能力的权重和偏置的神经元。CNN独有的两大特性:第一个是局部连接性;第二个是权值共享性。一般在一组有实际意义的数据矩阵中,局部区域内元素的相关性更强,联系更为紧密,而相距较远的各元素间的相关性减弱,联系更为松散。在此基础上,CNN中的局部连接概念应运而生,即单个神经元仅需对数据矩阵的局部区域进行感知,提取数据矩阵的局部特征,然后,在网络的更高层对所有局部特征进行全连接,从而得到全局特征。权值共享性是指同一个数据矩阵中的不同区域共享同一个权值,以此提取数据矩阵中不同空间位置的同一特征。CNN的这两大特点使得网络减少了一定量的权值参数、降低了计算复杂度,同时还能够保证提取特征的准确率。

CNN通常有4个基本组成部分:输入层、卷积层、池化层、全连接层。一般模型结构如图,首先,输入层对输入的数据进行预处理;其次,多个交替连接的卷积层与池化层对输入数据进行特征提取和压缩尺寸之后通过全连接层输出。

一维卷积神经网络:

应用在图像问题上的CNN通常是二维卷积(因为图像有RGB三个通道),而语音问题上的CNN输入是一个矩阵平面,可以用一维卷积。本文就讲讲一维卷积是怎么处理的。所谓一维卷积是指卷积核只在一个方向上移动。具体到语音上,假设一段语音提取特征后是一个M行N列(M表示特征维度,N表示帧数)的矩阵平面,卷积核要在帧的方向上从小到大移动。

上图来自网络,侵删

网络的架构定义情况:

a.将输入大小指定为1,它对应于整数序列输入的通道维度。

b.使用维度为100的单词嵌入来嵌入输入。

c.对于n元分词长度2、3、4和5,创建包含卷积层、批量归一化层、ReLU层、丢弃层和最大池化层的层块。

d.对于每个模块,指定200个大小为1×N的卷积滤波器和一个全局最大池化层。

e.将输入层连接到每个块,并使用串联层串联各块的输出。

f.要对输出进行分类,请包括一个输出大小为K的全连接层、一个softmax层和一个分类层,其中K是类的数量。

网络运行结果:

分类准确率

本文Matlab代码分享: 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于卷积神经网络的时间序列预测的 Matlab 代码示例: ```matlab % 加载数据 load sunspot.dat data = sunspot(:, 2); % 分割数据集为训练集和测试集 train_size = floor(length(data) * 0.8); train_data = data(1:train_size); test_data = data(train_size+1:end); % 数据归一化处理 max_train = max(train_data); min_train = min(train_data); train_data = (train_data - min_train) / (max_train - min_train); test_data = (test_data - min_train) / (max_train - min_train); % 将时间序列转换为卷积神经网络需要的格式 input_size = 10; output_size = 1; train_X = zeros(train_size-input_size-output_size+1, input_size, 1); train_Y = zeros(train_size-input_size-output_size+1, output_size); for i = 1:train_size-input_size-output_size+1 train_X(i, :, 1) = train_data(i:i+input_size-1); train_Y(i, :) = train_data(i+input_size:i+input_size+output_size-1); end % 构建卷积神经网络模型 layers = [ ... sequenceInputLayer(input_size) convolution1dLayer(3, 16, 'Padding', 'same') reluLayer maxPooling1dLayer(2, 'Stride', 2) convolution1dLayer(3, 32, 'Padding', 'same') reluLayer maxPooling1dLayer(2, 'Stride', 2) convolution1dLayer(3, 64, 'Padding', 'same') reluLayer fullyConnectedLayer(output_size) regressionLayer]; % 设置训练参数 options = trainingOptions(... 'adam', ... 'MaxEpochs', 100, ... 'MiniBatchSize', 32, ... 'Plots', 'training-progress'); % 训练模型 net = trainNetwork(train_X, train_Y, layers, options); % 对测试集进行预测 test_X = zeros(length(test_data)-input_size-output_size+1, input_size, 1); for i = 1:length(test_data)-input_size-output_size+1 test_X(i, :, 1) = test_data(i:i+input_size-1); end test_Y = predict(net, test_X); % 反归一化处理 test_Y = test_Y * (max_train - min_train) + min_train; % 绘制原始数据和预测结果 figure; plot(data, 'b'); hold on; plot(train_size+1:length(data), test_Y, 'r'); legend('原始数据', '预测结果'); ``` 该代码首先加载了一个名为 sunspot 的时间序列数据集,然后将其分割为训练集和测试集,并对数据进行了归一化处理。接着将训练集转换为卷积神经网络需要的格式,并构建了一个包含多个卷积层和全连接层的模型。使用训练集训练模型后,将测试集转换为相同的格式进行预测,并将预测结果反归一化处理后绘制出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值