如何使用Python创建Tensorflow的序列模型?
TensorFlow 是 Google 推出的一款云端机器学习平台,也是一款功能强大的深度学习框架。它使用数据流图来构建计算模型,这意味着你可以使用Python编写程序来定义计算图,然后 TensorFlow 将在 TensorFlow 会话中运行该图形以训练模型或进行推断。这种方式旨在实现高效的分布式计算。但是,构建模型是 TensorFlow 的核心部分。在本文中,我们将研究如何使用Python在 TensorFlow 中创建序列模型。
更多Python文章,请阅读:Python 教程
准备工作
在开始我们的教程之前,我们需要确保您在计算机上安装了Python 3.5 或更高版本。还要安装以下库:
* tensorflow – TensorFlow 的 Python API
* numpy – 处理向量和数组
* pandas – 处理数据
您可以使用Python包管理器pip安装这些库。在命令行下,输入以下命令:
pip install tensorflow numpy pandas
首先,什么是序列模型?
序列模型是一种在时序数据上工作的模型。这些可以是时间序列、文本序列或任何类似的数据。我们可以使用它来对样本的序列进行分类或预测。
例如,考虑一个文本分类问题:对电子邮件进行分类,将其标记为垃圾邮件或常规电子邮件。每个电子邮件都是一个文本序列,包含很多单词。我们可以使用序列模型来对每个电子邮件进行分类,而不是仅仅查看每个单独的单词。
创建序列模型
下面,我们将学习如何使用 Python 在 TensorFlow 中创建序列模型。我们将使用 Keras 序列 API 来构建模型。 Keras是一个高级人工神经网络库,旨在使神经网络架构的创建和训练变得更加容易。
在本教程中,我们将使用一个手写数字识别数据集来演示如何创建序列模型。
步骤 1:导入必要的库
首先,我们需要导入我们在本文开头提到的库,以及sklearn库中的load_digits函数。
import tensorflow as tf
from tensorflow import keras
import numpy as np
import pandas as pd
from sklearn.datasets import load_digits
步骤 2:加载数据
现在,我们需要加载手写数字识别数据集。我们可以使用sklearn库中的load_digits函数来加载数据,并使用pandas数据框来保存数据。
digits = load_digits()
# 将数据转换为 Pandas DataFrame
df = pd.DataFrame(data=digits.data, columns=[str(i) for i in range(64)])
df['target'] = pd.Series(digits.target)
print(df.head())
运行代码后,您将看到以下输出:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | … | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 0.0 | 5.0 | 13.0 | 9.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | … | ||||||
1 | 0.0 | 0.0 | 0.0 | 12.0 | 13.0 | 5.0 | 0.0 | 0.0 | 0.0 | 0.0 | … | ||||||
2 | 0.0 | 0.0 | 0.0 | 4.0 | 15.0 | 12.0 | 0.0 | 0.0 | 0.0 | 0.0 | … | ||||||
3 | 0.0 | 0.0 | 0.0 | 1.0 | 11.0 | 15.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | … | |||||
4 | 0.0 | 0.0 | 0.0 | 0.0 | 12.0 | 13.0 | 0.0 | 0.0 | 0.0 | 0.0 | … |
步骤 3:准备数据
在创建序列模型之前,我们需要对数据进行一些预处理。我们需要将输入数据归一化,并将目标变量转换为one-hot编码。
# 归一化输入
X = df.drop('target', axis=1) / 16.0
# 将目标变量转换为 one-hot 编码
y = keras.utils.to_categorical(df.target, 10)
print(X.head())
print(y[0:5])
在这里,我们使用DataFrame.drop()来删除目标变量,并将剩余的数据集归一化。然后,我们使用Keras实用程序中的to_categorical()函数将目标变量转换为one-hot编码。输出如下:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | … | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0000 | 0.0000 | 0.3125 | 0.8125 | 0.5625 | 0.0625 | … | ||||||||||
1 | 0.0000 | 0.0000 | 0.0000 | 0.7500 | 0.8125 | 0.3125 | … | ||||||||||
2 | 0.0000 | 0.0000 | 0.0000 | 0.2500 | 0.9375 | 0.7500 | … | ||||||||||
3 | 0.0000 | 0.0000 | 0.0000 | 0.0625 | 0.6875 | 0.9375 | … | ||||||||||
4 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.7500 | 0.8125 | … |
[[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]]
步骤 4:创建模型
现在,我们可以开始使用Keras API创建序列模型。在本例中,我们将使用一个简单的堆叠的全连接网络,其形状为 64 (输入层) -> 32 (隐藏层) -> 10 (输出层)。我们将使用ReLU作为激活函数。
# 创建模型
model = keras.Sequential([
keras.layers.Dense(32, input_shape=(64,), activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
我们创建了一个Keras序列模型,并添加了两个密集层:一个输入层、一个隐藏层和一个输出层。我们使用ReLU作为激活函数,softmax作为输出函数。在这里,我们编译了模型,并使用adam优化器和分类交叉熵作为损失函数。
步骤 5:训练模型
现在,我们可以对我们的数据进行训练。在本例中,我们将使用100个 epochs 进行训练,并使用10%的数据作为验证集。
# 在训练集上训练模型
history = model.fit(X, y, epochs=100, validation_split=0.1)
训练模型需要一段时间,但我们可以通过查看每个训练 epoch 的损失和准确性来跟踪模型的性能。
步骤 6:评估模型
一旦我们的模型训练好了,我们可以使用测试数据来评估模型的性能。在本例中,我们将使用与训练数据相同的数据集作为测试数据。
# 评估模型
loss, accuracy = model.evaluate(X, y)
print("Test set accuracy: {:.2f}%".format(accuracy * 100))
输出:
1796/1797 [>.] – ETA: 0s – loss: 0.1051 – accuracy: 0.9699Test set accuracy: 97.39%
从输出中,我们可以看到我们的模型在测试集上的准确性约为97.39%。这表明我们的模型在测试集上表现良好。
步骤 7:预测值
现在,我们可以使用我们的模型来进行预测。我们将使用测试数据集中的随机一行作为输入,然后将其转换为numpy数组,以便使用模型进行预测。
# 随机选择一些数据来进行预测
sample = X.sample(n=1)
# 预测数值
pred = model.predict(np.array(sample))
# 打印结果
print('预测的数字为:', np.argmax(pred))
输出:
预测的数字为: 5
我们的模型预测出了正确的数值,因为我们从测试数据中随机选择的一行是数字 5。
结论
我们已经学习了如何使用 Python 在 TensorFlow 中创建序列模型。我们首先导入了必要的库,然后加载并预处理了手写数字识别数据集。接下来,我们创建了一个简单的堆叠全连接网络,并将其编译和评估。最后,我们使用模型进行了预测,并打印出了正确的数值。如果您想进一步了解如何使用 TensorFlow,请参见 TensorFlow 官方文档。