深度学习入门系列5项目实战:用深度学习识别鸢尾花种类
大家好,我技术人Howzit,这是深度学习入门系列第五篇,欢迎大家一起交流!
深度学习入门系列1:多层感知器概述
深度学习入门系列2:用TensorFlow构建你的第一个神经网络
深度学习入门系列3:深度学习模型的性能评价方法
深度学习入门系列4:用scikit-learn找到最好的模型
深度学习入门系列5项目实战:用深度学习识别鸢尾花种类
深度学习入门系列6项目实战:声纳回声识别
深度学习入门系列7项目实战:波士顿房屋价格回归
深度学习入门系列8:用序列化保存模型便于继续训练
深度学习入门系列9:用检查点保存训练期间最好的模型
深度学习入门系列10:从绘制记录中理解训练期间的模型行为
深度学习入门系列11:用Dropout正则减少过拟合
深度学习入门系列12:使用学习规划来提升性能
深度学习入门系列13:卷积神经网络概述
深度学习入门系列14:项目实战:基于CNN的手写数字识别
深度学习入门系列15:用图像增强改善模型性能
深度学习入门系列16:项目实战:图像中目标识别
深度学习入门系列17:项目实战:从电影评论预测情感
深度学习入门系列18:递归神经网络概述
深度学习入门系列19:基于窗口(window)的多层感知器解决时序问题
深度学习入门系列20:LSTM循环神经网络解决国际航空乘客预测问题
深度学习入门系列21:项目:用LSTM+CNN对电影评论分类
深度学习入门系列22:从猜字母游戏中理解有状态的LSTM递归神经网络
深度学习入门系列23:项目:用爱丽丝梦游仙境生成文本
在这个项目教程中,你将学习如何在多分类问题上使用Keras构建和评估神经网络模型。一步步完成教程后,你将了解:
如何从CSV中加载数据并在Keras中使用。如何为建模神经网络准备多分类数据。如何用scikit-learn评价Keras 神经网络模型。让我们开始。
4.1鸢尾花分类数据集
在这个教程中,我们将使用标准机器学习案例,叫做鸢尾花数据集。对于练习神经网络,这个数据集值得很好的研的案例,因为四个输入变量都是数字而且有同样的单位厘米。每个实例为描述观察到的花测量的属性,输出变量是特定的鸢尾花种类。这个数据集的属性总结如下:
1.萼片长度,以厘米为单位
2.萼片宽度,以厘米为单位
3.花瓣长度,以厘米为单位
4.花瓣宽度,以厘米为单位
5.类别
这是一个多分类问题,意味着不止一个类要预测,实际上有三种花。这个很典型的分类问题,可以在这上面练习神经网络,因为三种类型的值需要特定的处理。下面是150个样本中前5个:
5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosa 4.6,3.1,1.5,0.2,Iris-setosa 5.0,3.6,1.4,0.2,Iris-setosa 12345
鸢尾花数据集是很好的研究案例,而且我们期望获取模型精度在95%-97%之间。当我门开发我们的模型,它提供了一个很好的目标。本书提供的样本代码中提供了数据集。你也可以从UCI机器学习仓库中下载鸢尾花数据集,并把以iris.csv名字放入你当前的工作目录中。你可以从UCI机器学习仓库首页中了解更多关于鸢尾花分类数据集。
4.2 导入类和函数
我们从导入本节课所需要的类和函数开始,包括我们需要的Keras功能,但是从Pandas数据加载并准备数据和scikit-learn中的模型评估。
import numpy from pandas import read_csv from keras.models import Sequential from keras.layers import Dense from keras.wrappers.scikit_learn import KerasClassifier from keras.utils import np_utils from sklearn.model_selection import cross_val_score from sklearn.model_selection import KFold from sklearn.preprocessing import LabelEncoder from sklearn.pipeline import Pipeline 12345678
14.3 初始化随机生成器
接下来我们需要初始化随机生成器为常数,这对于再次准确地获取模型的结果是很重要的。她也确保训练网络模型的随机过程具有可复制性。
# fix random seed for reproducibility seed = 7 numpy.random.seed(seed) 12
4.4 加载数据
数据集直接加载,因为输出变量包含字符,所以通过pandas加载数据是最容易。我们能把属性(列)划分为输入变量(X)和输出变量(Y)
# load dataset dataframe = read_csv("iris.csv", header=None) dataset = dataframe.values X = dataset[:,0:4].astype(float) Y = dataset[:,4] 12345
4.5 对输出变量进行编码
输出变量包含三个不同字符类型的值。当使用神经网络对多分类问题建模时,重新把输出属性从每种类别中包含字符串转成每类为布尔型的矩阵是一种很好的做法,给定实例是否有该类值。这操作叫做one-hot 编码或者从分类变量中创建虚拟变量。例如,在这个问题上,三类值分别为Iris-setosa,Iris-versicolor 和 Iris-virginica。如果我们有三观察值:
Iris-setosa Iris-versicolor Iris-virginica 123
我们把每个数据实例转成一个像下面的one-hot 二维矩阵。
Iris-setosa, Iris-versicolor, Iris-virginica 1,0,0 0,1,0 0,0,1 1234
我们首先使用scikit-learn类中LabelEncoder将字符转为整型。使用Keras中to_categorical()函数把整型向量转成one-hot编码。
# encode class values as integers encoder = LabelEncoder() encoder.fit(Y) encoded_Y = encoder.transform(Y) # convert integers to dummy variables (i.e. one hot encoded) dummy_y = np_utils.to_categorical(encoded_Y) 123456
4.6 定义神经网络模型
正如前面课前学到的,Keras 库提供了封装类,允许你在scikit-learn中使用Keras构建的深度学习模型。在Keras中有个KerasClassifier类,在scikit-learn中它被用于的估计器,在库中也是基本模型类型。KerasClassifier把函数名作为参数,这个函数必须返回结构化的神经网络,准备开始训练。
下面函数将这对鸢尾花分类问题建立一个基准的神经网络模型,创建了一个简单全连接神经网络,有四个神经元的隐藏层和输入层(可以有任意个数神经元)。隐藏层使用整流器(rectifier)激活函数,有着很好的表现。对于鸢尾花数据集我们采用one-hot编码,输出层必须创建三个输出值,每个类一个。输出值最大的那个就是预测类别。这个简单一层神经网络拓扑结构总结如下:
4 inputs -> [8 hidden nodes] -> 3 outputs 1
值得注意我们在输出端使用sigmoid激活函数。这确保了输出值在0-1之间,被用作预测的概率。最后网络使用的高效的ADAm梯度下降优化算法和对数损失函数,我们在Keras中称之为categorical_crossentropy。
# define baseline model def baseline_model(): # create modelmodel = Sequential()model.add(Dense(8, input_dim=4, activation='relu'))model.add(Dense(3, activation='softmax'))# Compile modelmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])return model 12345678910
我们现在创建KerasClassifier并在scikit-learn中使用。我们在KerasClassifier结构中传入的参数也将传入到fit() 中,用于内部训练神经网络。当我们训练网络时,传入nb_epoch为200,batch_size 为5 。当我们训练时设置verbose为0,关闭了调试模式。
estimator = KerasClassifier(build_fn=baseline_model, epochs=200, batch_size=5, verbose=0) 1
4.7 用K-折交叉验证评价模型
现在我们可以在训练集上评价神经网络模型。scikit-learn库使用一套技术来评价模型,有着出色的表现。评价机器学习模型的黄金标准是K-折交叉验证。首先我们定义评估流程。在这,我们设置折数为10(一个优秀的默认值)并在划分之前随机打乱数据。
kfold = KFold(n_splits=10, shuffle=True, random_state=seed) 1
现在我们能在数据集(X和dummy_Y)上使用10-fold交叉验证(kfold)程序评价我们的模型(estimator)。评价模型仅需要10秒并返回一个对象,该对象描述了对每种数据划分的10种有结构模型的评估。
results = cross_val_score(estimator, X, dummy_y, cv=kfold) print("Accuracy: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100)) 12
为了完整,下面列出了所有代码:
# Multiclass Classification with the Iris Flowers Dataset import numpy from pandas import read_csv from keras.models import Sequential from keras.layers import Dense from keras.wrappers.scikit_learn import KerasClassifier from keras.utils import np_utils from sklearn.model_selection import cross_val_score from sklearn.model_selection import KFold from sklearn.preprocessing import LabelEncoder # fix random seed for reproducibility seed = 7 numpy.random.seed(seed) # load dataset dataframe = read_csv("iris.csv", header=None) dataset = dataframe.values X = dataset[:,0:4].astype(float) Y = dataset[:,4] # encode class values as integers encoder = LabelEncoder() encoder.fit(Y) encoded_Y = encoder.transform(Y) # convert integers to dummy variables (i.e. one hot encoded) dummy_y = np_utils.to_categorical(encoded_Y) # define baseline model def baseline_model():# create modelmodel = Sequential()model.add(Dense(8, input_dim=4, activation='relu'))model.add(Dense(3, activation='softmax'))# Compile modelmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])return model estimator = KerasClassifier(build_fn=baseline_model, epochs=200, batch_size=5, verbose=0) kfold = KFold(n_splits=10, shuffle=True, random_state=seed) results = cross_val_score(estimator, X, dummy_y, cv=kfold) print("Accuracy: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))
1234567891011121314151617181920212223242526272829303132333435363738结果归纳为在数据集上的均值和在模型准确率的标准差。在未知数据上,模型性能的估计是合理的。对于这个问题也是我们所知道最好的结果。
Accuracy: 97.33% (4.42%) 1
4.8 总结
在这节课,你已经学习了如何通过Keras Python库构建和评估神经网络。完成这个教程后,你已经学到:
如何加载数据并在Keras可用。如何使用one-hot编码为多类分类数据建模做准备。如何使用Keras神经网络模型和scikit-learn。针对多分类问题,如何使用Keras定义一个神经网络。如何使用scikit-learn和K-折交叉验证来评价Keras神经网络模型。 4.8.1 接下来这是你的第一个在单独的数据集上使用Keras的端到端项目。在接下来的课程,你将针对二分类问题构建神经网络模型并调节它们来提高模型性能。
鸢尾花数据集
相关知识
深度学习 花卉识别
深度学习应用开发
【机器学习】鸢尾花分类:机器学习领域经典入门项目实战
深度学习入门之鸢尾花数据集读入
深度学习及其应用
鸢尾花数据集深度分析:机器学习的入门实践
神经网络与深度学习
MATLAB实现低配电脑的果树病虫害深度学习识别
深度学习鸢尾花分类实验报告 鸢尾花实验目的
深度学习入门——基于TensorFlow的鸢尾花分类实现(TensorFlow
网址: 深度学习入门系列5项目实战:用深度学习识别鸢尾花种类 https://www.huajiangbk.com/newsview1842726.html
上一篇: 鸢尾花识别 |
下一篇: 鸢尾花分类预测实验(机器学习) |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039