IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 深度学习入门系列4:项目:用深度学习识别鸢尾花种类 -> 正文阅读

[人工智能]深度学习入门系列4:项目:用深度学习识别鸢尾花种类

系列文章目录

深度学习入门系列1:多层感知器概述
深度学习入门系列2:用TensorFlow构建你的第一个神经网络
深度学习入门系列3:深度学习模型的性能评价方法
深度学习入门系列4:用scikit-learn找到最好的模型
深度学习入门系列5:项目:用深度学习识别鸢尾花种类
待更新:
深度学习入门系列6:项目:声纳二分类
深度学习入门系列7:项目:波士顿房屋价格回归
深度学习入门系列8:保存模型以便稍后进行序列化
深度学习入门系列9:训练期间用检查点保存最好模型
深度学习入门系列10:从绘制记录中理解训练期间的模型行为
深度学习入门系列11:用Dropout正则减少过拟合
深度学习入门系列12:使用学习规划来提升性能
深度学习入门系列13:卷积神经网络
深度学习入门系列14项目:手写数字识别
深度学习入门系列15用图像增强改善模型性能
深度学习入门系列16:图像中对象识别项目
深度学习入门系列17:项目:从电影评论预测情感
深度学习入门系列18:递归神经网络


在这个项目教程中,你将学习如何在多分类问题上使用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

鸢尾花数据集是很好的研究案例,而且我们期望获取模型精度在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

14.3 初始化随机生成器

接下来我们需要初始化随机生成器为常数,这对于再次准确地获取模型的结果是很重要的。她也确保训练网络模型的随机过程具有可复制性。

# fix random seed for reproducibility 
seed = 7 numpy.random.seed(seed)

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]

4.5 对输出变量进行编码

输出变量包含三个不同字符类型的值。当使用神经网络对多分类问题建模时,重新把输出属性从每种类别中包含字符串转成每类为布尔型的矩阵是一种很好的做法,给定实例是否有该类值。这操作叫做one-hot 编码或者从分类变量中创建虚拟变量。例如,在这个问题上,三类值分别为Iris-setosa,Iris-versicolor 和 Iris-virginica。如果我们有三观察值:

Iris-setosa 
Iris-versicolor 
Iris-virginica

我们把每个数据实例转成一个像下面的one-hot 二维矩阵。

Iris-setosa, Iris-versicolor, Iris-virginica 
1,				0, 					0  
0, 				1, 					0  
0, 				0, 					1

我们首先使用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)

4.6 定义神经网络模型

正如前面课前学到的,Keras 库提供了封装类,允许你在scikit-learn中使用Keras构建的深度学习模型。在Keras中有个KerasClassifier类,在scikit-learn中它被用于的估计器,在库中也是基本模型类型。KerasClassifier把函数名作为参数,这个函数必须返回结构化的神经网络,准备开始训练。

下面函数将这对鸢尾花分类问题建立一个基准的神经网络模型,创建了一个简单全连接神经网络,有四个神经元的隐藏层和输入层(可以有任意个数神经元)。隐藏层使用整流器(rectifier)激活函数,有着很好的表现。对于鸢尾花数据集我们采用one-hot编码,输出层必须创建三个输出值,每个类一个。输出值最大的那个就是预测类别。这个简单一层神经网络拓扑结构总结如下:

4 inputs -> [8 hidden nodes] -> 3 outputs

值得注意我们在输出端使用sigmoid激活函数。这确保了输出值在0-1之间,被用作预测的概率。最后网络使用的高效的ADAm梯度下降优化算法和对数损失函数,我们在Keras中称之为categorical_crossentropy。

# define baseline model 

def baseline_model():  
# create model  
	model = Sequential()  
	model.add(Dense(8, input_dim=4, activation='relu')) 
	model.add(Dense(3, activation='softmax'))

 	# Compile model 
	model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])return model

我们现在创建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)

4.7 用K-折交叉验证评价模型

现在我们可以在训练集上评价神经网络模型。scikit-learn库使用一套技术来评价模型,有着出色的表现。评价机器学习模型的黄金标准是K-折交叉验证。首先我们定义评估流程。在这,我们设置折数为10(一个优秀的默认值)并在划分之前随机打乱数据。

kfold = KFold(n_splits=10, shuffle=True, random_state=seed)

现在我们能在数据集(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))

为了完整,下面列出了所有代码:

# 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 model 

	model = Sequential()  
	model.add(Dense(8, input_dim=4, activation='relu'))  
	model.add(Dense(3, activation='softmax'))  
	# Compile model  
	model.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))

结果归纳为在数据集上的均值和在模型准确率的标准差。在未知数据上,模型性能的估计是合理的。对于这个问题也是我们所知道最好的结果。

 Accuracy: 97.33% (4.42%)

4.8 总结

在这节课,你已经学习了如何通过Keras Python库构建和评估神经网络。完成这个教程后,你已经学到:

  • 如何加载数据并在Keras可用。
  • 如何使用one-hot编码为多类分类数据建模做准备。
  • 如何使用Keras神经网络模型和scikit-learn。
  • 针对多分类问题,如何使用Keras定义一个神经网络。
  • 如何使用scikit-learn和K-折交叉验证来评价Keras神经网络模型。

4.8.1 接下来

这是你的第一个在单独的数据集上使用Keras的端到端项目。在接下来的课程,你将针对二分类问题构建神经网络模型并调节它们来提高模型性能。

鸢尾花数据集

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 12:05:08  更:2021-08-07 12:05:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:45:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码