如何使用Tensorflow和Keras Sequential API来探索花卉数据集?
介绍
人类一直对自然界中的花卉奇妙的形状和色彩感到着迷。花卉作为与我们亲密接触的物体,已经成为了很好的研究对象。本文将介绍如何使用Tensorflow与Keras库探索花卉分类数据集,该数据集包含了5种常见花卉的图片,是一个合适的开始深度学习的例子。
更多Python文章,请阅读:Python 教程
数据集
我们将使用的数据集是由机器学习开放资料库(ML Open Data)提供的Iris花卉分类数据集,这个数据集由三个不同类型的Iris花卉的样本集组成,每个类别包含50个样本,每个测试实例都有4个特征。
import pandas as pd
# 加载数据集
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
df = pd.read_csv(url, header=None)
df.head()
输出结果:
0 1 2 3 4
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
我们可以看到这个数据集由5列数据构成,前4列是4个特征(萼片长度,萼片宽度,花瓣长度,花瓣宽度),最后一列是3种不同类型的花卉。我们将这个数据集进行处理,把花卉类型做成one-hot编码。
# 处理数据集
dataset = df.values
X = dataset[:,0:4].astype(float)
Y = pd.get_dummies(dataset[:,4]).values
构建模型
我们将构建一个使用Sequential API的神经网络模型。该模型包含一个输入层,两个隐藏层和一个输出层。每个隐藏层都有12个神经元,并以Relu函数作为激活函数。我们的输出层是具有三个输出的softmax层,代表3个花卉类型。
from keras.models import Sequential
from keras.layers import Dense
# 构造模型
model = Sequential()
model.add(Dense(12, input_dim=4, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(3, activation='softmax'))
模型编译和训练
我们将使用交叉熵损失函数和Adam优化器来编译我们的模型。我们的评估标准是“准确率”。在训练过程中,我们将使用30个epoch和10个批次。
# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
history = model.fit(X, Y, epochs=30, batch_size=10)
模型评估
我们可以评估我们的模型的性能,使用下面的代码评估我们的模型。我们得到了准确率99.33%。
scores = model.evaluate(X, Y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
输出结果:
150/150 [==============================] - 0s 353us/step
accuracy: 99.33%
结论
在本文中,我们介绍了如何使用Tensorflow和Keras Sequential API来探索花卉数据集。我们介绍了如何加载和处理数据集,构建模型并进行编译和训练,最后评估我们的模型。通过使用30个epoch和10个批次,我们得到了99.33%的准确率。
这个例子显示了如何使用深度学习来处理分类问题,可以应用于各种实际应用场景中。另外,我们还可以继续尝试更多的模型架构和参数来提高模型的性能。