位置: IT常识 - 正文

基于1DCNN(一维卷积神经网络)的目标识别(一维卷积padding)

编辑:rootadmin
基于1DCNN(一维卷积神经网络)的目标识别

推荐整理分享基于1DCNN(一维卷积神经网络)的目标识别(一维卷积padding),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:一维卷积神经网络原理,一维卷积模型,一维卷积模型,一维卷积计算公式,一维卷积模型,一维卷积计算公式,一维卷积padding,一维卷积计算公式,内容如对您有帮助,希望把文章链接给更多的朋友!

简介:研一已经结束,感觉动手能力太差,找了一篇优秀的博主的文章,然后进行学习,奈何

科研小白,代码经过各种查找,终于明白了原理。

在此先感谢博主"秋雨行舟",他还有B站对应的讲解,贼良心的一位博主!!

链接:https://blog.csdn.net/qq_38918049/article/details/124992113?spm=1001.2014.3001.5501

对博主中的代码做了稍许修改,添加了大量注释,以此篇博客记录学习过程中的收获。

数据集:凯斯西储实验室的轴承故障诊断(振动加速度采集的)和我的研究对象很很相似,都是一维时间序列的目标,所以拿来练手。

基于1DCNN(一维卷积神经网络)的目标识别(一维卷积padding)

平台:jupyter notebook,把每一行代码所表述的意思完全展示出来了,更加容易理解代码执行过程,相较于pyhcarm更加友好,对跑神经网络,因为能够直观的看到运行过程。

环境:win10,tensorflow2.1(感觉深度学习,版本可以不要太高,要不然很多不兼容,整着好麻烦,我就是从tensorflow版本2.5降到了2.1,目前为止用的还可以,可能以后还有升级,,,)。

代码介绍:从10个.mat文件中经过一系列数据处理(内容是真滴丰富)分为1500个(784,1)的训练集和750个(784,1)的验证集和测试集,搭建CNN模型(函数式)进行训练,通过测试集进行评估。

代码获取:可以从“秋雨行舟”博主上去找资源,也可以找我啊,我基本上把每行代码都注释了,也欢迎研究一维时间序列目标检测,目标识别的小伙伴一块组队学习啊!

目录

  一.数据预处理

1.1 从.mat文件中读取数据的字典

1.2划分训练集和测试集

1.3训练集,测试集打标签

1.4数据标准化并把测试集再分为测试集和验证集

           二.搭建1DCNN模型

2.1 数据处理

2.2 定义一个保存最佳模型的方法

2.3 搭建模型

2.4 编译模型

2.5训练模型并保存

2.6效果展示(损失,精确对比)

          三.评估模型

 四.混淆矩阵

 五.总结


一.数据预处理1.1 从.mat文件中读取数据的字典# 定义函数把原始数据打包成字典def capture(original_path): files = {} for i in filenames: file_path = os.path.join(d_path, i) file = loadmat(file_path) # loadmat()加载.mat函数 file_keys = file.keys() # 获取加载后的.mat文件的键值,也就是‘12k_Drive_End_B007_0_118.mat’这种 for key in file_keys: # 获取所有文件中结构体中含有字符为DE的数据,并将数据写入字典中 if 'DE' in key: # 这个地方‘DE’在这组数据中都有‘Drive_End’所以相当于遍历了,如果是凯斯西储实验室的其他几组数据,要换一下 files[i] = file[key].ravel() # 转换为一维数组 return filesdata = capture(original_path=d_path)data1.2划分训练集和测试集# 定义参数rate = [0.5, 0.25, 0.25] # 训练集,测试集,验证集划分比例(测试集和验证集这个步骤在一块)number = 300 # 每类样本的数量length = 784 # 样本长度# 定义划分训练集和测试集的函数def slice_enc(data, slice_rate=rate[1] + rate[2]): keys = data.keys() Train_Samples = {} Test_Samples = {} for i in keys: slice_data = data[i] # 遍历到.mat字典的每个值,也就是data的array部分(用键去遍历) all_lenght = len(slice_data) # end_index = int(all_lenght * (1 - slice_rate)) # 感觉这个被山区的注释这一行才对啊,能理解 # 下面是每个.mat数据中的value部分拿出一半做训练集的一部分 samp_train = int(number * (1 - slice_rate)) # 1000(1-0.3) # 不明白这个地方的备注(1000(1-0.3)) 不应该是300*(1-0.5)? Train_sample = [] Test_Sample = [] # 抓取训练数据放到训练集中 for j in range(samp_train): # (遍历150次) # 每个.mat数据的训练集的长度 sample = slice_data[j*150: j*150 + length] # (0:784) 也就是每个训练数据为(784,1) Train_sample.append(sample) # 把每个做训练的部分放到训练集中 # 抓取测试数据 for h in range(number - samp_train): # (遍历150次) sample = slice_data[samp_train*150 + length + h*150: samp_train*150 + length + h*150 + length] # 每条测试数据为(784,1) Test_Sample.append(sample) # 把每个做测试的部分放到测试集中 # 遍历的每条数据把划分的训练数据,测试数据放到对应集合中 Train_Samples[i] = Train_sample Test_Samples[i] = Test_Sample return Train_Samples, Test_Samplestrain,test = slice_enc(data)# 每个.mat数据划分为多少个训练字段,# 所以总共10个原始数据,每个原始数据划分为150个训练字段for i in train.keys(): a = train[i] len(a) print(len(a))[out]:1501501501501501501501501501501.3训练集,测试集打标签# 定义添加标签的函数def add_labels(train_test): X =[] Y = [] label = 0 for i in filenames: # 遍历每个.mat数据,(i=0,第一个mat数据中的150条训练数据的标签设为0) x = train_test[i] X += x lenx = len(x) Y += [label] *lenx label +=1 return X,Y# 为训练集制作标签Train_X ,Train_Y = add_labels(train)# Train_X,Train_Y中1500条训练数据,每150条训练数据对应一个标签,有0-9个10个不同的标签类型1.4数据标准化并把测试集再分为测试集和验证集# 定义标准化函数def scalar_stand(Train_X, Test_X): # 用训练集标准差标准化训练集以及测试集 data_all = np.vstack((Train_X, Test_X)) # 数据降为一维平铺 scalar = preprocessing.StandardScaler().fit(data_all) # sklearn.preprcoessing包下的数据标准化函数 Train_X = scalar.transform(Train_X) #调用 .transform函数对数据进行标准化 Test_X = scalar.transform(Test_X) return Train_X, Test_X# 测试集再分为测试集和验证集(比例1:1)def valid_test_slice(Test_X, Test_Y): test_size = rate[2] / (rate[1] + rate[2]) # n_splits=1,将其分成一组也就是两部分,test_size每组的比例 ss = StratifiedShuffleSplit(n_splits=1, test_size=test_size) # 拿出一半做测试集,一半做验证集(test_size=0.5) Test_Y = np.asarray(Test_Y, dtype=np.int32) # 更新Test_Y for train_index, test_index in ss.split(Test_X, Test_Y): X_valid, X_test = Test_X[train_index], Test_X[test_index] # 把验证集和训练集对应 Y_valid, Y_test = Test_Y[train_index], Test_Y[test_index] return X_valid, Y_valid, X_test, Y_testnormal = True # 是否标准化# 执行标准化if normal: Train_X, Test_X = scalar_stand(Train_X, Test_X)Train_X = np.asarray(Train_X) # 经过方法np.asarray(x)得到最新的xTest_X = np.asarray(Test_X)# 把测试集拿出一半做验证集Valid_X, Valid_Y, Test_X, Test_Y = valid_test_slice(Test_X, Test_Y)二.搭建1DCNN模型2.1 数据处理2.2 定义一个保存最佳模型的方法# 保存最佳模型class CustomModelCheckpoint(keras.callbacks.Callback):# 使用回调函数来观察训练过程中网络内部的状态和统计信息r然后选取最佳的进行保存 def __init__(self, model, path): # (自定义初始化) self.model = model self.path = path self.best_loss = np.inf # np.inf 表示+∞,是没有确切的数值的,类型为浮点型 自定义最佳损失数值 def on_epoch_end(self, epoch, logs=None): # on_epoch_end(self, epoch, logs=None)在每次迭代训练结束时调用。在不同的方法中这个logs有不同的键值 val_loss = logs['val_loss'] # logs是一个字典对象directory; if val_loss < self.best_loss: print("\nValidation loss decreased from {} to {}, saving model".format(self.best_loss, val_loss)) self.model.save_weights(self.path, overwrite=True) # overwrite=True覆盖原有文件 # 此处为保存权重没有保存整个模型 self.best_loss = val_loss2.3 搭建模型# 搭建模型框架(函数式API方法)def mymodel(): inputs = keras.Input(shape=(Train_X.shape[1],Train_X.shape[2]))# ([1500, 784, 1])把【784,1】传入输入层,没看数据处理时,还不知道为啥这样传 h1= layers.Conv1D(filters=8,kernel_size=3,strides=1,padding='same',activation='relu')(inputs) h1 = layers.MaxPool1D(pool_size=2,strides=2,padding='same')(h1) h2 = layers.Conv1D(filters=16,kernel_size=3,strides=1,padding='same')(h1) h2 = layers.MaxPool1D(pool_size=2,strides=2,padding='same')(h2) h3 = layers.Flatten()(h2) # 扁平层,方便全连接层传入数据 h4 = layers.Dropout(0.6)(h3) # Droupt层舍弃百分之60的神经元 h5 = layers.Dense(32,activation='relu')(h4) # 全连接层,输出为32 outputs = layers.Dense(10,activation='softmax')(h5) # 再来个全连接层,分类结果为10种(9种故障类型,1种正常的) # 不要出现中文,,,,,,血泪教训,最开始把1DCNN模型,有模型二字,导致编译出错,一顿爆改! deep_model = keras.Model(inputs,outputs,name = '1DCNN') # 整合每个层,搭建1DCNN模型成功 return deep_model

2.4 编译模型# 编译模型,(优化器:Adam,损失函数:sparse_categorical_crossentropy)model.compile( optimizer=keras.optimizers.Adam(), loss='sparse_categorical_crossentropy', metrics=['accuracy'])2.5训练模型并保存history = model.fit(Train_X, Train_Y, batch_size=256, epochs=50, verbose=1, validation_data=(Valid_X, Valid_Y), callbacks=[CustomModelCheckpoint( model, r'mybestcnn.h5')]) # verbose=1带进度条的输出日志信息

 

2.6效果展示(损失,精确对比)

三.评估模型四.混淆矩阵

五.总结

第一次完整的看完一篇代码,权当入门起步!,因为版本和环境的问题,把代码从pycharm转到jupyter,着实费了了我好大力,一行一行代码去百度,最后才完成,遇到很多困难,但解决掉BUG的时候真滴酸爽!!!!!!!!

本文链接地址:https://www.jiuchutong.com/zhishi/296003.html 转载请保留说明!

上一篇:nvm安装(windows)(nvme安装win10教程)

下一篇:〖大前端 - 基础入门三大核心之JS篇⑰〗- JavaScript的流程控制语句「while循环语句」(大前端需要掌握什么技能)

  • 苹果手机口罩面部如何解锁(苹果手机口罩面部识别怎么设置)

    苹果手机口罩面部如何解锁(苹果手机口罩面部识别怎么设置)

  • 荣事达洗衣机e1故障原因如何预防(荣事达洗衣机e1故障怎么解决)

    荣事达洗衣机e1故障原因如何预防(荣事达洗衣机e1故障怎么解决)

  • 天猫双11助力额度是什么意思(天猫双11助力额度多少)

    天猫双11助力额度是什么意思(天猫双11助力额度多少)

  • 电脑正在更新怎么取消(电脑正在更新怎么取消让他开机)

    电脑正在更新怎么取消(电脑正在更新怎么取消让他开机)

  • 华为手表和oppo手机能不能匹配(华为手表和OPPO手表哪个性价比高)

    华为手表和oppo手机能不能匹配(华为手表和OPPO手表哪个性价比高)

  • i77700和7700k区别(i7 7700相当于i5几代)

    i77700和7700k区别(i7 7700相当于i5几代)

  • 苹果微信视频不弹出(苹果微信视频不能播放原因)

    苹果微信视频不弹出(苹果微信视频不能播放原因)

  • 临时会话对方能看到吗(临时会话对方能听到吗)

    临时会话对方能看到吗(临时会话对方能听到吗)

  • 蓝牙耳机听歌能听多久(蓝牙耳机听歌能听见生音,为啥接电话听不见生音)

    蓝牙耳机听歌能听多久(蓝牙耳机听歌能听见生音,为啥接电话听不见生音)

  • 麒麟980和985区别(麒麟980和985哪个好)

    麒麟980和985区别(麒麟980和985哪个好)

  • qq在线文件和离线文件的区别(qq文件在线发送和离线发送)

    qq在线文件和离线文件的区别(qq文件在线发送和离线发送)

  • q点在哪里充值(充值q点充值中心)

    q点在哪里充值(充值q点充值中心)

  • 小米手表苹果手机能用吗(小米手表苹果手表对比)

    小米手表苹果手机能用吗(小米手表苹果手表对比)

  • imac可以当显示器用吗(imac2021可以当显示器用吗)

    imac可以当显示器用吗(imac2021可以当显示器用吗)

  • 运算器和什么合称为cpu(运算器和什么的结合体称为cpu)

    运算器和什么合称为cpu(运算器和什么的结合体称为cpu)

  • 电脑金山pdf是什么软件(金山pdf是流氓软件吗)

    电脑金山pdf是什么软件(金山pdf是流氓软件吗)

  • 如何让酷狗歌词在手机桌面(如何让酷狗歌词显示在手机桌面)

    如何让酷狗歌词在手机桌面(如何让酷狗歌词显示在手机桌面)

  • 淘宝查看自己是几颗星(在淘宝怎么查自己是几心)

    淘宝查看自己是几颗星(在淘宝怎么查自己是几心)

  • 苹果11怎么关机重启(苹果11怎么关机不了)

    苹果11怎么关机重启(苹果11怎么关机不了)

  • 美图秀秀萌趣贴纸在哪(美图秀秀萌拍素材已下载)

    美图秀秀萌趣贴纸在哪(美图秀秀萌拍素材已下载)

  • 抖音2个视频怎么拼一起(抖音2个视频怎么合成一个)

    抖音2个视频怎么拼一起(抖音2个视频怎么合成一个)

  • 荣耀20pro有面部识别(荣耀20pro有人脸识别吗)

    荣耀20pro有面部识别(荣耀20pro有人脸识别吗)

  • 通话中断痕迹怎么删除(通话中断怎么恢复)

    通话中断痕迹怎么删除(通话中断怎么恢复)

  • 苹果手机耗电快吗(苹果手机耗电快的原因)

    苹果手机耗电快吗(苹果手机耗电快的原因)

  • 如何增加vue视频时间(vue视频编辑速度怎么放慢)

    如何增加vue视频时间(vue视频编辑速度怎么放慢)

  • 如何分辨airpods1和2(如何分辨AirPods1和2)

    如何分辨airpods1和2(如何分辨AirPods1和2)

  • 微信怎么投诉举报微商(微信如何投诉举报成功)

    微信怎么投诉举报微商(微信如何投诉举报成功)

  • win10电脑防火墙怎么关闭(win10电脑防火墙如何关闭)

    win10电脑防火墙怎么关闭(win10电脑防火墙如何关闭)

  • HTML小游戏19 —— html5版开心斗地主小游戏(附完整源码)(html游戏大全)

    HTML小游戏19 —— html5版开心斗地主小游戏(附完整源码)(html游戏大全)

  • 纳税调整项目包括哪些?请简单列举
  • 建材公司小规模纳税人税率
  • 电梯维保费属于建筑服务吗
  • 企业转让固定资产要交什么税
  • 申报财务报表时应收和预收可以合并
  • 融资租赁手续费如何入账
  • 核定征收企业怎么申报
  • 收到发票当月不抵扣怎么做账
  • 年化收益率和年利率的区别的例子
  • 高新技术企业进项加计扣除
  • 然后销售产品
  • 不动产抵扣涉及净值,这里的净值是否扣除减值准备,是否扣除不动产改变用途当月的折旧额?
  • 缴纳滞纳金计入什么科目
  • 交到公户上的钱,还没到账可以退回吗?
  • 公司培训餐费计入什么费用
  • 小规模适用税率
  • 什么车不用交保险
  • 所有者权益变动表范本
  • php获取文件扩展内容
  • php扩展编写
  • 慈善捐赠金额排行
  • 药品生产企业应建立
  • 购买财务软件会有操作流程吗
  • 存货报废如何账务处理
  • 实收资本主要包括哪些
  • js的发展历史
  • 快速制作一个演示文稿可用什么
  • 暂估入库的商品含税吗
  • 猿创部落是干什么的
  • 所得税费用为什么不计入营业利润
  • 红字发票申请单怎么开
  • python中如何创建文件
  • php怎么装
  • SQLite3 API 编程手册
  • 销售物流
  • 中付支付科技有限公司备付金
  • 合同取得成本的账务处理
  • 如何判断有无运费险
  • 固定资产补入账和补提折旧
  • 个税返还手续费怎么做账
  • 收到国家电网信息但号码不是的
  • 收回应收账款赊账怎么算
  • 销售商品开票税目
  • 残保金季报还是月报
  • 政府会计双核算模式的好处
  • 季节性停工折旧计入什么科目
  • 税费的审计
  • 股东出资转为借款
  • 应付账款账面价值怎么算
  • 买二手办公用品
  • 资产负债表基本公式
  • 违约合同怎么解决
  • 三大财务报表英文
  • 房地产开发企业分为几个等级
  • 如何防止sql注入及数据安全问题
  • wmiex.exe是什么程序
  • 取消windows 7的自动关机如何设置
  • 安装xps虚拟打印机
  • win10任务快速切换
  • win10安装失败
  • linux isolcpus
  • Win7系统怎么打开文件后缀名
  • w10资源管理器怎么打开快捷方式
  • msg命令用法
  • js原型面试题
  • 安卓开发遇到的问题
  • jquery的选择器作用是选中某些元素
  • 自定义图片制作软件
  • 安卓用什么抓包
  • 一个页面
  • jquery获取button的value值
  • shell脚本位置变量
  • android的数据储存方式
  • flow 开发
  • 小规模增值税减免会计科目
  • 成品油消费税税率包括哪些
  • 下载重庆税务官方app
  • 企业填写莞e申报的通知
  • 存在未申报记录
  • 车辆过户给自己家人
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设