这一节主要涉及神经网络算法,由此展开交通路标自动识别的应用。

交通路标的自动识别其实就是一个分类问题。对于分类问题,我们有很多的方法来实现,比如KNN,贝叶斯等。关键点在于图片转文本。本节采用人工神经网络算法来进行识别。

人工神经网络(Artificial Neural
Network)是简称神经网络(NN),是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的处理机制的一种数学模型。

其结构为:

对于一系列输入变量(信号)x1,x2,…xn,每一个变量具有一个权重,求和之后通过激活函数f得到一个输出的反馈。常见的激活函数有:

Relu,Sigmoid函数等。常见的神经网络算法包含BP神经网络,LM神经网络,FNN神经网络。这一节涉及的是BP神经网络。突然想起我本科毕设也是用的BP,这应该算是最基础的易理解的一种神经网络。

其结构为:

其分为输入层,隐含层和输出层。输入层交叉连接到隐含层,是按误差逆传播算法训练的多层前馈网络,得到误差后反向调整各个点的权重,直到最后的误差值在可接受范围内(小于设置的阈值)。

BP神经网络的实现是使用python的keras模块。该模块在深度学习中应用也非常广。

首先路标的数据是一张含有许多个路标的图片,

首先需要对这些图片进行切割成单个图标,可以使用python下面的PIL模块来实现。

    from os import listdir# 1、图片转文本# 图片处理# 切割图片from PIL import Image as imgimport osdef cutimg(path1, path2, x, y):thisimg = img.open(path1)width, height = thisimg.sizexsize = height//xysize = width//yprint(xsize)print(ysize)# if(xsize > width or ysize > height):#    raise SizeError("切割大小大于原图大小")n = 0for i in range(0, x):for j in range(0, y):cutvalue = (j*xsize, i*ysize, (j+1)*xsize, (i+1)*ysize) # 表示切割的起始点和终点像素thiscut = thisimg.crop(cutvalue)thiscut.convert('1').save(path2+str(n)+".jpg")print("正在处理第"+str(n)+"张图片")n += 1cutimg("XX\\data\\交通路标\\timg.jpg","XX\\data\\交通路标\\sub\\", 4, 6)
[/code]path2将最后得到的图片放到sub文件夹路径下。注意这里一开始切割出来是黄色的图标,这里我们想要灰色的,因此在代码中使用```codethiscut.convert('1')
[/code]转换成黑白。切割图片用到的函数是crop().得到的交通图标结果为:![](https://img-blog.csdn.net/20170210154321043)  下面一步是将图片转化为文本,将黑色像素写为1,白色的像素点写为0,这样生成图片的文本矩阵。```code# 先将所有图片转为固定宽高,比如93*94,然后再转为文本# pillowfrom PIL import Imagedef img2txt(ipath, opath):im = Image.open(ipath)fh = open(opath, "a")width = im.size[0]height = im.size[1]for i in range(0, width):for j in range(0, height):cl = im.getpixel((i, j))#  print(cl)#clall=cl[0]+cl[1]+cl[2]if(cl == 255):# 黑色fh.write("1")else:fh.write("0")fh.write("\n")fh.close()#img2txt("D:\\data\\交通路标\\1.jpg","D:\\data\\交通路标\\0.txt")filelist = listdir("D:\\我的教学\\Python\\CSDN-Python数据分析\\data\\交通路标\\sub\\")for i in range(0, len(filelist)):thisfilename = filelist[i].split(".")[0]print(thisfilename)img2txt("D:\\data\\交通路标\\sub\\"+thisfilename+".jpg","D:\\data\\交通路标\\doc\\"+thisfilename+".txt")

这样就得到我们的交通图标的文本。

下面就来实现BP神经网络。

实现步骤为:

1、读取数据
2、keras.models Sequential /keras.layers.core Dense Activation
3、Sequential建立模型
4、Dense建立层
5、Activation激活函数
6、compile模型编译
7、fit训练(学习)
8、验证(测试,分类预测)

下面是实现的代码:

    # 使用人工神经网络识别路标# 加载数据import pandas as pdadef datatoarray(fname):arr = []fh = open(fname)for i in range(0, 93):thisline = fh.readline()for j in range(0, 94):arr.append(int(thisline[j]))return arr# 数据的读取与整理x = []y = []filelist = listdir("D:\\我的教学\\Python\\CSDN-Python数据分析\\data\\交通路标\\sub\\")for i in range(0, len(filelist)):thisfilename = filelist[i].split(".")[0]thisdata = datatoarray("D:\\我的教学\\Python\\CSDN-Python数据分析\\data\\交通路标\\doc\\"+thisfilename+".txt")x.append(thisdata)y.append(thisfilename)print("数据读取成功")# 数据预处理xf = pda.DataFrame(x)yf = pda.DataFrame(y)x2 = xf.as_matrix().astype(int)y2 = yf.as_matrix().astype(int)# 使用人工神经网络模型from keras.models import Sequentialfrom keras.layers.core import Dense,Activationmodel = Sequential()# 输入层model.add(Dense(10, input_dim=len(x2[0])))model.add(Activation("relu"))# 输出层model.add(Dense(1,input_dim=3))# 模型的编译categorical_crossentropymodel.compile(loss="mean_squared_error", optimizer="adam")# 训练model.fit(x2, y2, nb_epoch=1000, batch_size=6)# 预测分类# 实现预测路标rst = model.predict_classes(x2[0:7, :])
[/code]首先写了一个函数将数据转化为数组来加载,之后对数据进行读取和整理(注:我们得到的最后每一张图片的大小为93x94.)。x相当于特征,y相当于类别,其实就是文件名的前缀。listdir模块可以自动加载文件夹下面的所有文件。对数据的预处理,先转化成数据框,再转化成整型矩阵。这里使用Dense来建立层,这里建立的层数可以自己设置,input_dim这个不能随便设置,必须与我们输入的特征数目一致,否则会出错。输出层的层数为1,损失函数设置为mean_squared_error。optimizer是设置求解方法。nb_epoch是训练次数,这里设为1000,batch_size是批大小,这个数目的设置尽量不要太大。最后再来思考一些问题:1. 如何实现多种类别预测?
可以使用数据标准化来实现多类别预测, 也可以设置输出层为多层来实现多类别预测
2. 如果使用数据标准化,应该怎么实现?
有多种数据标准化方法,比如Min-Max方法:新数据=(原数据-极小值)/(极大值-极小值),z-score标准化:新数据=(原数据-
均值)/标准差,Decimal scaling等
3. batch_size定为多少是有技巧的,请研究一下该技巧,并简单描述一下?
可以设置为5,6,8,9等,不要过大
4. 总结一下常见的激活函数与loss(损失)函数
常见的激活函数:Relu,Leaky Relu, PRelu, Randomized Leaky ReLu, Sigmoid,tanh,Maxout,
常见的损失函数:0-1损失函数,Log损失函数,Hinge损失函数,指数损失,感知损失。![在这里插入图片描述](https://img-blog.csdnimg.cn/20210608151750993.gif)

python数据分析与挖掘学习笔记(7)-交通路标自动识别实战与神经网络算法相关推荐

  1. python数据分析与挖掘学习笔记(5)-公司客户价值判断分析与聚类算法

    这一节是使用聚类算法来对公司客户价值进行判断和分析. 提到聚类算法,大家应该都会想到是K-means.这是比较简单和经典的一种聚类算法. k-means聚类算法的原理比较简单,实现也容易,可以直接调用 ...

  2. [转载] Python数据分析与可视化学习笔记(一)数据分析与可视化概述

    参考链接: Python | 数据分析的数学运算 数据分析与可视化(一) 1.1 数据分析1.1.1 数据.信息与数据分析1.1.2数据分析与数据挖掘的区别1.1.3数据分析的流程 1.2 数据可视化 ...

  3. Python数据分析与可视化学习笔记(一)数据分析与可视化概述

    数据分析与可视化(一) 1.1 数据分析 1.1.1 数据.信息与数据分析 1.1.2数据分析与数据挖掘的区别 1.1.3数据分析的流程 1.2 数据可视化 1.3 数据分析与可视化常用工具 1.4 ...

  4. 极客时间·3小时Python 数据分析和可视化 学习笔记

    3小时Python 数据分析和可视化 分解问题 数据分析 Python实现 总结经验 01 课程目标 掌握分解问题的能力 学会用Python进行数据处理.分析.展示 总结经验 02 确定目标 ​ 问题 ...

  5. Python数据分析和挖掘之入门理论+实操

    Python数据分析和挖掘听课笔记 1.集中趋势.离中趋势 2.数据分布 3.抽样理论 代码实现 4.数据分类 5.单属性分析 分析类别详解 实例运用 np.histogram函数 简单对比分析操作 ...

  6. python数据分析与挖掘实战 之笔记2

    <python数据分析与挖掘实战>学习笔记2 经过前面章节的分析,即对数据进行探索和预处理,得到了处理后的数据.根据所得到的数据建立分类与预测.聚类分析.关联规则.时序模式.和偏差检测等模 ...

  7. 《Python数据分析与挖掘实战》Chapter8中医证型关联规则挖掘笔记

    最近在学习<Python数据分析与挖掘实战>中的案例,写写自己的心得. 代码分为两大部分:1.读取数据并进行聚类分析                                  2. ...

  8. python数据分析与挖掘实战 配套资源_[课程学习]Python数据分析与挖掘实战 配套完整数据和源代码 rar文件[25.46MB]-码姐姐下载...

    该资源为<python数据分析与挖掘实战>一书的配套的资源代码,鉴于大多数读者很难找到此资源,特此分... 大小:20.99MB | 2020-05-14 19:07:04 本资源是pyt ...

  9. 从零开始学python数据分析-从零开始学Python数据分析与挖掘 PDF 扫描版

    给大家带来的一篇关于数据挖掘相关的电子书资源,介绍了关于Python.数据分析.数据挖掘方面的内容,本书是由清华大学出版社出版,格式为PDF,资源大小67.8 MB,刘顺祥编写,目前豆瓣.亚马逊.当当 ...

最新文章

  1. yolov3 权重转换
  2. 《Leadership and the One Minute Manager》读书笔记之一
  3. Python爬虫学习获取腾讯新闻并存入Csv文件
  4. Maven开发笔记(四)—— Maven中plugins和pluginManagement
  5. pytorch中的squeeze和unsqueeze
  6. 如何侦听网线数据_网络工程师 | 七类网线水晶头又如何制作?
  7. 【数字逻辑设计】基本逻辑门
  8. 漫谈LiteOS之开发板-串口(基于GD32450i-EVAL)
  9. 计算机原理与结构 实验1《实验工具使用》
  10. 高通CAMERA 调试
  11. RDO方式安装Openstack Allinone问题记录
  12. Canvas递归画一棵树
  13. 【Spark NLP】第 6 章:信息检索
  14. Cravatar:WordPress网站Gravatar头像完美替代方法
  15. 二叉排序树和平衡二叉树
  16. Python基础 - 文件拷贝
  17. 在dick字典里找最大值并返回key的办法
  18. Java 多线程线程安全(面试概念解答二)
  19. Photoshop学习(四):为图像添加文字
  20. 巧用img的width和height属性进行缩图,使图片不变形

热门文章

  1. laravel 8控制器获取当前url
  2. str_split() 函数
  3. android 人生日历,千呼万唤始出来 人生日历Android版现世
  4. pytorch用法笔记--不定期更新
  5. ad19pcb设置恢复默认_电脑主板BIOS设置详解BIOS知识大全
  6. 微软批量许可服务中心注册指南
  7. ora-01017错误处理
  8. 荣耀10的android在哪,荣耀10详细配置参数,你想知道的都在这里
  9. 初学Java入门介绍
  10. C++黑马视频教程对应的课件