风机桨叶故障诊断(三) 

识别桨叶——初步构建BP神经网络

新的一天,希望有好的运气。今天开始着手系统的第一个模块,从一幅图像中寻找到桨叶所在的位置。第一直觉我们的识别任务属于难度比较大,干扰因素多的了,所以我没有考虑先试一下Logistic回归之类的相对简单的算法,我准备先简单抽选一些样本,直接用BP神经网络模型快速实现一下,然后再观察我们的算法问题所在,逐步进行完善,包括修改模型,增加样本数量等等。说干就干!

之前我们已经得到了可以用来提取样本的风机图像库,我手动的从里面截取了一些样本,数了一下,正样本49个,负样本28个。然后将这些大小不一的正负样本统一缩放成20×20像素的小图像,下图所示的就是正样本最后处理完的结果:

准备工作结束后,开始动手编写一个最简单的三层BP神经网络了。

我们的输入是我们归一化后的20×20的图像,所以输入层的神经元个数为400。隐含层的神经元个数我最初选取的是25,输出层我选择的节点个数为2。用[1 0]代表正样本的期望输出,[0 1]代表负样本的期望输出。

具体实现我是参考的coursera上吴恩达老师的机器学习课程上的代码,那个神经网络的示例代码是用来训练手写体数字识别的,是个多分类问题。由于我是在那份代码上简单修改来的,所以这也是为什么我的输出层有两个神经元而不是一个的原因,我把问题看成了一个多分类问题。

经过了一上午的coding后,成功运行了。由于每次训练的结果都会不同,我多次运行并观察,训练样本的预测准确率在90%以上,测试集上的预测准确率在80%左右。看起来初步的结果还可以,不过我只有17个测试样本,再加上都是我手动选取的,有一定的主观因素,80%的准确率水分还是很大的。我们的初步实现的目的就是发现我们这个识别任务的难点,问题所在,只停留在得到一个准确率的数字是不行的,所以我意识到应该想办法要做一些误差分析。

让我们来看一下我们的算法都有哪些问题,到底将测试样本中的哪些类型的图像预测错误了,也就是算法在哪类物体上表现不好。于是我着手写了下面的函数,需要提供测试样本集矩阵(每一行=一个20×20图像展开后形成的向量),以及表示每个样本是否被预测正确(用0和1表示)的数组,再提供一个可视化时每个样本图像边长显示多少的参数,matlab代码如下:

function [ h, display_array ] = DisplayErrorTestExample( X, example_width,errorIndex )
%显示所有测试集并标记出有错误的测试集
%errorIndex标识测试集每个样本的预测是否有误,有误用1,正确用0表示% Set example_width automatically if not passed in
if ~exist('example_width', 'var') || isempty(example_width) example_width = round(sqrt(size(X, 2)));
end% Gray Image
colormap(gray);% Compute rows, cols
[m n] = size(X);
example_height = (n / example_width);% Compute number of items to display
display_rows = floor(sqrt(m));
display_cols = ceil(m / display_rows);% Between images padding
pad = 1;% Setup blank display
display_array = ones(pad + display_rows * (example_height + pad), ...pad + display_cols * (example_width + pad));% Copy each example into a patch on the display array
curr_ex = 1;
for j = 1:display_rowsfor i = 1:display_colsif curr_ex > m, break; end% Copy the patch% Get the max value of the patchmax_val = max(abs(X(curr_ex, :)));display_array(pad + (j - 1) * (example_height + pad) + (1:example_height), ...pad + (i - 1) * (example_width + pad) + (1:example_width)) = ...reshape(X(curr_ex, :), example_height, example_width) / max_val;%如果是错误的测试样本,标红框if errorIndex(curr_ex)==1display_array(pad + (j - 1) * (example_height + pad) , pad + (i - 1) * (example_width + pad) + (0:example_width+1))=zeros(1,example_width+2);display_array(pad + j  * (example_height + pad) , pad + (i - 1) * (example_width + pad) + (0:example_width+1))=zeros(1,example_width+2);display_array(pad + (j - 1) * (example_height + pad) + (0:example_height+1), pad + (i - 1) * (example_width + pad) ) = zeros(example_height+2,1);display_array(pad + (j - 1) * (example_height + pad) + (0:example_height+1), pad + i * (example_width + pad) ) = zeros(example_height+2,1);endcurr_ex = curr_ex + 1;endif curr_ex > m, break; end
end% Display Image
h = imagesc(display_array, [-1 1]);% Do not show axis
axis image offdrawnow;end

将上面的方法添加到写好的代码中,重新运行,其中两次的结果如下(图像显示的是仅有的17个测试样本,被黑框圈起的是预测错误的样本):

可以看到,算法在负样本的预测中错误较多,我感觉这一方面与本身负样本就较少,一方面与负样本间差异很大,造成算法学习起来困难。我们重新思考下我们的系统,我们第一步是要从图像中识别出桨叶,如果识别错了,就会将不是桨叶的物体认为成桨叶进行下一步的故障诊断,那结果将是不能接受的。相反,如果我们对于一幅风机图像中的三个桨叶没有完全识别出来,却是无关紧要的,因为我们能在视频短时间的几帧之内获取到数张同一风机的图片,对于同一桨叶的识别我们有很多次的机会,所以我们算法对于正样本的漏识率可以相对较高,因为最终的识别率还是很高。

所以可以看出,对于负样本的错误预测,也就是假阳性的概率,是必须要降低的。先从算法入手,或许我们可以通过修改神经网络输出时的判断阈值,也就是只有极有把握输入为正样本时,才判为正样本,否则均判为负样本。这样做也就是人为选择牺牲了识别率,降低了误识率。一切想法的好坏以实际说话,马上修改代码重新运行,其中两次结果如下:

可以看到,出现假阳性的概率明显下降,同时漏识率比较明显的上升了,不过这是我们愿意看到的现象。说明这点改进对于算法的提升显著,后面算法的不断完善中也应当保留这种思想。

今天就到这里了,忙了一天,今天的进展着实不小。总结一下,首先简单的选取了少量的样本并进行样本归一化,这样就得到了可供训练的训练集和测试集。然后训练了400×25×2的三层BP神经网络,最后对最初步的模型进行了误差分析并找到了一种效果显著的提升方法!

风机桨叶故障诊断(三) 识别桨叶——初步构建BP神经网络相关推荐

  1. 【数字识别】基于matlab BP神经网络不同字体0-9数字识别【含Matlab源码 1863期】

    一.手写数字识别技术简介 1 案例背景 手写体数字识别是图像识别学科下的一个分支,是图像处理和模式识别研究领域的重要应用之一,并且具有很强的通用性.由于手写体数字的随意性很大,如笔画粗细.字体大小.倾 ...

  2. 人脸识别系统开题报告,BP神经网络图像识别

    基于神经网络的人脸识别有哪些算法 上次的人脸识别仿真,我们用的是PCA和SVM方法进行人脸识别,该方法仍属于机器学习领域,未涉及神经网络的知识.这次使用的方法是基于PCA和BP神经网络对人脸识别. 其 ...

  3. 【情感识别】基于matlab BP神经网络语音情感识别【含Matlab源码 349期】

    一.BP神经网络语音情感识别简介 0 引言 随着科技的迅速发展, 人机交互显得尤为重要.语音是语言的载体, 是人与人之间交流的重要媒介.相较于其它交流方式而言, 语音交流更加直接.便捷.近年来, 随着 ...

  4. Python学习记录 使用tensorflow 2.8 完成猫狗识别 使用keras构建CNN神经网络

    猫狗识别 项目数据分为带标签和不带标签 带标签:25000张 不带标签:12500张 文章目录 猫狗识别 数据分类处理 图像增强预处理 编写神经网络结构 设置模型保存路径 输入样本进入模型进行训练 加 ...

  5. python构建bp神经网络_鸢尾花分类(一个隐藏层)__1.数据集

    IDE:jupyter 目前我知道的数据集来源有两个,一个是csv数据集文件另一个是从sklearn.datasets导入 1.1 csv格式的数据集(下载地址已上传到博客园----数据集.rar) ...

  6. 利用matlab的newff构建BP神经网络来实现数据的逼近和拟合

    假设P是原始数据向量: T是对应的目标向量: 现在需要通过神经网络来实现P->T的非线性映射. net = newff(minmax(P),[16,1],{'tansig','purelin'} ...

  7. bp神经网络实现人脸识别,车牌识别深度神经网络

    1.您好,请问您有基于BP神经网络算法的车牌识别的程序代码吗?用matlab可以运行的那种. 1.对样本集进行归一化 2.创建BP神经网络 3.设置网络的训练参数 4.把样本输入BP网络进行训练 5. ...

  8. 【交通标志识别】基于matlab GUI BP神经网络交通标志识别系统(含语音报警)【含Matlab源码 2240期】

    ⛄一.BP神经网络交通标志识别简介 道路交通标志用以禁止.警告.指示和限制道路使用者有秩序地使用道路, 保障出行安全.若能自动识别道路交通标志, 则将极大减少道路交通事故的发生.但是由于道路交通错综复 ...

  9. 【车牌识别】基于matlab GUI BP神经网络车牌识别(带面板+语音播报)【含Matlab源码 1220期】

    ⛄一.BP车牌识别简介(附课程作业报告) 车牌识别系统设计与实现 车牌识别系统主要分为三部分:车牌图像预处理.特征提取以及基于BP神经网络对特征进行训练和分类,流程图如图1所示. 图1 车牌识别系统组 ...

最新文章

  1. checkbox的全选中,取消全选中
  2. 【Hibernate步步为营】--(一对多映射)之单向关联
  3. 小程序获取列表的下标
  4. linux usb xhci ehci,ehci和xhci有什么区别
  5. mysql配置以及性能优化(转)
  6. c++qq主界面_QQ小程序,一个被严重低估的超级流量池!错过你就亏大了
  7. sublime安装插件详细教程
  8. 《Java程序性能优化》-葛一鸣
  9. 阿里聚合直播盒子APP源码™ AlijuheCMS Build Demo 20190206
  10. RedHat红帽RHEL7.2镜像下载以及安装教程(内含下载链接)
  11. 5G网络演进行业及市场发展需求
  12. 英魂之刃服务器8.8维护,英魂之刃8大联动!每一个都是良心之作!玩家:公开打脸同行?...
  13. 周记--听平凡人说故事
  14. #边学边记 必修4 高项:对事的管理 第1章 项目立项管理 之 立项管理内容
  15. smbd cpu高 linux,Samba smbd vfs.c访问限制绕过漏洞(CVE-2015-5252)
  16. 计算机主板反复启动,主板无限重启怎么回事
  17. chatter投稿&メール通知
  18. Camouflaged Object Detection阅读笔记
  19. access找不到输入表或者dual_神奇的DUAL表总结
  20. 出门在外,我却被前妻坑成了「老赖」!

热门文章

  1. 论文学习5-NODE2BITS: Compact Time- and Attribute-aware Node Representations for User Stitching
  2. JQuery Tips
  3. 使网页成黑白色调的滤镜(转)
  4. Exalogic硬件架构
  5. 写一些脚本的心得总结系列第3篇------同步数据到其他表
  6. 10天学安卓-第二天
  7. 数据库中char, varchar, nvarchar的差异
  8. Leetcode--151. 翻转字符串里的单词
  9. Leetcode--16. 最接近的三数之和
  10. java ejb项目_Maven创建EJB项目结构