用一维CNN对多维数据进行分类

本文介绍如何使用一维卷积神经网络(CNN)对一维向量数据进行分类。首先讨论了将一维CNN应用于非图像数据的背景,然后详细展示了数据预处理、模型构建、训练、模型保存及预测的步骤。通过实例代码,阐述了在一维CNN中,数据的channel概念和扩维操作的重要性。
摘要由CSDN通过智能技术生成

近日,老板突发奇想想让我用CNN模型对他研究的项目数据进行一个分类预测。他是快凌晨一点给我发的消息,当时一想,CNN不是用来搞图像数据用的吗?这分明是牛头不对马嘴呀,当时也没急着回他,假装睡着了,可是那晚确实没睡着,脑子里就净想这事。。。
第二天起来查看资料,还真有CNN网络模型用来对单列多维数据进行分类,用的就是一维卷积神经网络,而图像处理的是用二维卷积神经网络。现在我们就来仔细聊聊一维卷积神经网络。
相信大家都很熟悉一张灰度图的数据结构是是个二维矩阵,彩色图就是一个三维矩阵。
然而我要进行处理的数据却是一维的向量。一维卷积操作如下图所示:

在这里插入图片描述

  • 图中的输入的数据维度为8,过滤器的维度为5。与二维卷积类似,卷积后输出的数据维度为8−5+1=4。
  • 如果过滤器数量仍为1,输入数据的channel数量变为16,即输入数据维度为8×16。这里channel的概念相当于自然语言处理中的embedding,而该输入数据代表8个单词,其中每个单词的词向量维度大小为16。在这种情况下,过滤器的维度由5变为5×16,最终输出的数据维度仍为4。
  • 如果过滤器数量为n,那么输出的数据维度就变为4×n。

老板给我的数据样本一共是3600个数据样本,每个样本数据为128维;为了其能进行一维卷积操作,必须先对所有数据进行扩维,就是将其增加一个维度;简单来说,我们把原先的矩阵当成一个平摊在桌面的纸片,变化以后,相当于给它立起来了,把原先的X轴“厚度”变为1;此时数据还是原来的数据,但是多了一个轴。对此数据而言,因为数据样本有3600个,维度是128维,整个数据格式是一个3600x128的二维矩阵,对其进行扩维,得到一个3600x128x1的三维矩阵。

还是拿代码来详细说明

代码是基于anaconda环境的tensorflow框架编写
python版本是:3.7.0
tensorflow版本:2.3.1
预先导入相应的包,有些是没有用的,自行斟酌

import numpy as np
import pandas as pd
import keras
from keras.models import Sequential
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils, plot_model
import matplotlib.pyplot as pl
from sklearn import metrics
from sklearn.model_selection import cross_val_score, train_test_split, KFold
from sklearn.preprocessing import LabelEncoder
from keras.layers import Dense, Dropout, Flatten, Conv1D, MaxPooling1D
from keras.models import model_from_json
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
import seaborn as sns
import os
import itertools

1.加载数据:

# 载入数据
B_data = np.load('./data/data.npy')
B_label = np.load('./data/label.npy')
# B_data = np.transpose(B_data)
#print(B_data)
X = np.expand_dims(B_data[:, 0:128].astype(float), axis=2)
#print(X[1])
# print(X)
# print(X.shape)
# print('--------------')
Y = B_label
  • 38
    点赞
  • 338
    收藏
    觉得还不错? 一键收藏
  • 73
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值