首页 > 分享 > 利用keras框架实现鸢尾花的识别

利用keras框架实现鸢尾花的识别

利用keras框架实现鸢尾花的识别

青漾IP属地: 浙江

2019.07.25 08:07:36字数 1,018阅读 2,265

利用keras框架实现鸢尾花的识别#

前言

本项目是朱某学习第二阶段深度学习给自己布置的一个家庭作业,在第二阶段的学习中,我学习了如何处理二元分类、多分类问题以及连续数据预测的问题。如何对送进网络的数据进行预处理。如何根据送进网络的验证数据正确处理过拟合问题。在学习过程中,我用到的数据集都是keras自带的数据集,因此我就想。能否根据自己自定义的一批数据来实现网络训练,并正确判断鸢尾花的类型,虽然艰难重重,但是最后还是成功了。

数据集介绍

本次项目采用采用的是鸢尾花数据集,Iris 鸢尾花数据集是一个经典数据集,在统计学习和机器学习领域都经常被用作示例。数据集内包含 3 类共 150 条记录,每类各 50 个数据,每条记录都有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,可以通过这4个特征预测鸢尾花卉属于(iris-setosa, iris-versicolour, iris-virginica)中的哪一品种。在去年寒假我曾用过该数据集做个KNN算法的测试,虽然该数据集数据量较少,但因为有较大的相关性,放进神经网络训练,依然可以得到不错的结果。


i鸢尾花


数据格式

为了方便计算机的读取,我们把三种花的类型分别用:0,1,2进行替代


数据


接下来我们读入数据

import csv import random import numpy def loadDataset(filename, split, trainingSet=[], testSet=[]): with open(filename, 'rt') as csvfile: lines = csv.reader(csvfile) dataset = list(lines) # 转换成list,lines是所有的行 for x in range(len(dataset) - 2): for y in range(5): dataset[x][y] = float(dataset[x][y]) if random.random() < split: trainingSet.append(dataset[x]) else: testSet.append(dataset[x]) trainingSet=[] testSet=[] loadDataset(r'iris.data.txt', 0.67, trainingSet, testSet) #通过设定一个概率阈值对数据集分割训练集和测试集 partial_x_train = [] #训练集输入 partial_y_train = [] #训练集标签 x_val = [] y_val = [] #处理测试输入数据集,将前四个元素生成一个array,最后把array拼在一起,构建一个五维张量 for i in trainingSet: partial_x_train.append((i[:4])) partial_x_train= numpy.asfarray(partial_x_train) # #处理测试输入标签 # 初始化一个三维array,值的大小代表概率。根据数据赋值,把0,1,2对应元素赋值0.99,其他赋值0.01,最后整合成一个四维度张量 for i in trainingSet: targets = numpy.zeros(3) + 0.01 targets[int(i[4:][0])] = 0.99 partial_y_train.append(targets) partial_y_train=numpy.array(partial_y_train) #exit # #处理测试输入数据集 for i in testSet: x_val.append((i[:4])) x_val= numpy.asfarray(x_val) # # #处理测试输入标签 for i in testSet: target = numpy.zeros(3) + 0.01 target[int(i[4:][0])] = 0.99 y_val.append(target) y_val=numpy.array(y_val) #将测试集的的一部分分为校验数据 test_x=x_val[12:] test_y=y_val[12:] x_val1=x_val[:12] y_val1=y_val[:12] print(y_val1)

通过观察,我们可以看出,一份数据的前四个数据决定最后一个数据,因为输出的数据总共有三个类别,因此我们设计一个输入4个结点输出三个节点的神经网络,因为数据量较少,我们设置两层中间层,每层64个节点。前两层我们使用‘relu’作为激活函数


relu

当结果是输出多个分类的概率时,用softmax激活函数


softmax

对于输出多个分类结果,最好的损失函数是categorical_crossentropy

categorical_crossentropy性质:即受误差的影响,所以当误差大的时候,权重更新就快,当误差小的时候,权重的更新就慢。这是一个很好的性质。
性质:
a.非负性。(所以我们的目标就是最小化代价函数)
b.当真实输出a与期望输出y接近的时候,代价函数接近于0.(比如y=0,a~0;y=1,a~1时,代价函数都接近0)。

from keras import models from keras import layers model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(4,))) #inputshape 4 代表输入5维度tensor model.add(layers.Dense(64, activation='relu')) #当结果是输出多个分类的概率时,用softmax激活函数,它将为3个分类提供不同的可能性概率值 model.add(layers.Dense(3, activation='softmax')) #对于输出多个分类结果,最好的损失函数是categorical_crossentropy model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) # history = model.fit(partial_x_train, partial_y_train, epochs=64, validation_data = (x_val1, y_val1)) # # history_dict = history.history print(history_dict.keys())

接下来我们根据训练数据的误差和校验数据的误差画出函数

误差曲线

接下来我们根据训练数据的误差和校验数据的精度画出函数


误差曲线

准确度曲线

可以看出第二种值是最大的,因此还是蛮准的,接下来我们对输入的数据进行一些简单的处理。统计化处理,把数值处理成期望为0,方差为1的分布。

常用的数据处理方法有:

把数值都变小,通常把数组转换到0和1之间。 统一化,把数值处理成在一个取值范围之内。 统计化处理,把数值处理成期望为0,方差为1的分布。

第三种处理方式的公式如下,其中X’为均值,std为(X-X')的标准差

实现代码如下:(只对训练数据进行处理)

mean = partial_x_train.mean(axis=0) partial_x_train -= mean std = partial_x_train.std(axis = 0) partial_x_train /= std ​ x_val -= mean x_val /= std

数据处理结果

虽然最后评价出的准确值都差不多,但是我们可以看出训练时的准度高多了

接下来开始进入CNN阶段。

最后编辑于

:2019.07.25 08:12:58

更多精彩内容,就在简书APP

"小礼物走一走,来简书关注我"

还没有人赞赏,支持一下

总资产0.685共写了6.9W字获得12个赞共7个粉丝

序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...

沈念sama阅读 203,271评论 5赞 476

序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...

文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...

文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...

正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...

茶点故事阅读 63,553评论 5赞 365

文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...

那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...

文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...

序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...

正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...

茶点故事阅读 35,578评论 2赞 320

正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...

茶点故事阅读 37,661评论 1赞 329

序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...

正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...

茶点故事阅读 38,940评论 3赞 307

文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...

文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...

我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...

正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...

茶点故事阅读 42,391评论 2赞 342

相关知识

深度学习入门——基于TensorFlow的鸢尾花分类实现(TensorFlow
colab cnn实现花卉图片分类识别
TensorFlow学习记录(八)
基于keras框架的MobileNetV3深度学习神经网络花卉/花朵分类识别系统源码
基于TensorFlow实现LSTM的鸢尾花数据分类
利用VGG16做花数据集的识别
基于CNN的鸢尾花分类器
Keras学习笔记(二)Keras模型的创建
基于深度学习的花卉识别研究
基于深度学习和迁移学习的识花实践

网址: 利用keras框架实现鸢尾花的识别 https://m.huajiangbk.com/newsview460398.html

所属分类:花卉
上一篇: 5种分类花卉识别数据集
下一篇: 《物流与供应链》PPT课件.pp