python数据分析与挖掘学习笔记(7)-交通路标自动识别实战与神经网络算法
这一节主要涉及神经网络算法,由此展开交通路标自动识别的应用。
交通路标的自动识别其实就是一个分类问题。对于分类问题,我们有很多的方法来实现,比如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)-交通路标自动识别实战与神经网络算法相关推荐
- python数据分析与挖掘学习笔记(5)-公司客户价值判断分析与聚类算法
这一节是使用聚类算法来对公司客户价值进行判断和分析. 提到聚类算法,大家应该都会想到是K-means.这是比较简单和经典的一种聚类算法. k-means聚类算法的原理比较简单,实现也容易,可以直接调用 ...
- [转载] Python数据分析与可视化学习笔记(一)数据分析与可视化概述
参考链接: Python | 数据分析的数学运算 数据分析与可视化(一) 1.1 数据分析1.1.1 数据.信息与数据分析1.1.2数据分析与数据挖掘的区别1.1.3数据分析的流程 1.2 数据可视化 ...
- Python数据分析与可视化学习笔记(一)数据分析与可视化概述
数据分析与可视化(一) 1.1 数据分析 1.1.1 数据.信息与数据分析 1.1.2数据分析与数据挖掘的区别 1.1.3数据分析的流程 1.2 数据可视化 1.3 数据分析与可视化常用工具 1.4 ...
- 极客时间·3小时Python 数据分析和可视化 学习笔记
3小时Python 数据分析和可视化 分解问题 数据分析 Python实现 总结经验 01 课程目标 掌握分解问题的能力 学会用Python进行数据处理.分析.展示 总结经验 02 确定目标 问题 ...
- Python数据分析和挖掘之入门理论+实操
Python数据分析和挖掘听课笔记 1.集中趋势.离中趋势 2.数据分布 3.抽样理论 代码实现 4.数据分类 5.单属性分析 分析类别详解 实例运用 np.histogram函数 简单对比分析操作 ...
- python数据分析与挖掘实战 之笔记2
<python数据分析与挖掘实战>学习笔记2 经过前面章节的分析,即对数据进行探索和预处理,得到了处理后的数据.根据所得到的数据建立分类与预测.聚类分析.关联规则.时序模式.和偏差检测等模 ...
- 《Python数据分析与挖掘实战》Chapter8中医证型关联规则挖掘笔记
最近在学习<Python数据分析与挖掘实战>中的案例,写写自己的心得. 代码分为两大部分:1.读取数据并进行聚类分析 2. ...
- python数据分析与挖掘实战 配套资源_[课程学习]Python数据分析与挖掘实战 配套完整数据和源代码 rar文件[25.46MB]-码姐姐下载...
该资源为<python数据分析与挖掘实战>一书的配套的资源代码,鉴于大多数读者很难找到此资源,特此分... 大小:20.99MB | 2020-05-14 19:07:04 本资源是pyt ...
- 从零开始学python数据分析-从零开始学Python数据分析与挖掘 PDF 扫描版
给大家带来的一篇关于数据挖掘相关的电子书资源,介绍了关于Python.数据分析.数据挖掘方面的内容,本书是由清华大学出版社出版,格式为PDF,资源大小67.8 MB,刘顺祥编写,目前豆瓣.亚马逊.当当 ...
最新文章
- yolov3 权重转换
- 《Leadership and the One Minute Manager》读书笔记之一
- Python爬虫学习获取腾讯新闻并存入Csv文件
- Maven开发笔记(四)—— Maven中plugins和pluginManagement
- pytorch中的squeeze和unsqueeze
- 如何侦听网线数据_网络工程师 | 七类网线水晶头又如何制作?
- 【数字逻辑设计】基本逻辑门
- 漫谈LiteOS之开发板-串口(基于GD32450i-EVAL)
- 计算机原理与结构 实验1《实验工具使用》
- 高通CAMERA 调试
- RDO方式安装Openstack Allinone问题记录
- Canvas递归画一棵树
- 【Spark NLP】第 6 章:信息检索
- Cravatar:WordPress网站Gravatar头像完美替代方法
- 二叉排序树和平衡二叉树
- Python基础 - 文件拷贝
- 在dick字典里找最大值并返回key的办法
- Java 多线程线程安全(面试概念解答二)
- Photoshop学习(四):为图像添加文字
- 巧用img的width和height属性进行缩图,使图片不变形