100天搞定机器学习|day39 Tensorflow Keras手写数字辨认
作者头像
  • 大plane
  • 2019-11-23 13:06:48 5

TensorFlow简介及应用实例

TensorFlow 是一款由Google大脑团队开发的开源软件库,主要用于数值计算。它采用数据流图(data flow graphs)的方式进行运算,其中节点(nodes)代表各种数学操作,而边(edges)则表示节点之间的多维数据数组,也就是张量(tensors)。该软件库灵活的架构使得用户能够在多种平台上执行计算任务,包括台式计算机上的单个或多个CPU/GPU、服务器以及移动设备等。

TensorFlow最初设计用于支持机器学习和深度神经网络的研究,但由于其通用性强,也被广泛应用于其他计算领域。

安装TensorFlow

为了安装TensorFlow,您可以选择纯净版的安装方法。如果您使用Anaconda环境,可以通过命令行运行以下命令来安装TensorFlow: bash pip install tensorflow

安装完成后,您可以通过以下代码导入所需的库: python import tensorflow as tf from tensorflow import keras 需要注意的是,某些教程中可能会使用 import tensorflow.keras,但这样做有时会导致错误。建议直接使用上述方法导入。

导入MNIST数据集

MNIST 数据集是一个包含大量28x28像素的手写数字图片及其对应标签的数据集。由于一些原因,Keras自带的MNIST数据集下载可能会失败。解决这个问题的方法之一是手动下载MNIST数据集并将其路径配置到您的项目中。具体步骤如下:

  1. 下载MNIST数据集文件(例如,mnist.npz)到本地。
  2. 修改Keras的 mnist.py 文件,将数据集路径设置为您本地的位置。

之后,您可以通过以下代码加载和查看数据: ```python import tensorflow as tf import numpy as np import matplotlib.pyplot as plt

(xtrain, ytrain), (xtest, ytest) = tf.keras.datasets.mnist.load_data()

显示第一张图片

plt.imshow(xtrain[0], cmap=plt.cm.binary) plt.show() print(ytrain[0]) ```

数据预处理

为了提高模型的性能,我们需要对数据进行预处理,特别是归一化操作。这一步骤将图像的像素值限制在0到1之间: ```python xtrain = tf.keras.utils.normalize(xtrain, axis=1) xtest = tf.keras.utils.normalize(xtest, axis=1)

再次显示归一化后的图片

plt.imshow(x_train[0], cmap=plt.cm.binary) plt.show() ```

构建与训练模型

接下来,我们将使用Keras的Sequential模型来构建一个简单的神经网络。该模型包含两个具有128个单元的全连接层(Dense layers),以及一个输出层,输出层的激活函数为softmax: ```python model = tf.keras.models.Sequential() model.add(tf.keras.layers.Flatten(input_shape=(28, 28))) model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu)) model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu)) model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax))

model.compile(optimizer='adam', loss='sparsecategoricalcrossentropy', metrics=['accuracy']) model.fit(xtrain, ytrain, epochs=3) ```

在训练过程中,我们可以观察到损失值逐渐下降,而准确率逐步提升。

模型评估与测试

训练完成后,我们可以使用测试数据集来评估模型的表现: python val_loss, val_acc = model.evaluate(x_test, y_test) print(val_loss) print(val_acc)

此外,我们还可以通过预测测试数据集来验证模型的效果,并使用 argmax 函数解析预测结果: ```python import numpy as np predictions = model.predict(x_test) print(np.argmax(predictions[0]))

plt.imshow(x_test[0], cmap=plt.cm.binary) plt.show() ```

模型保存与恢复

为了方便后续使用,我们可以将训练好的模型保存下来,并在需要时重新加载: ```python model.save('epicnumreader.model')

加载保存的模型

newmodel = tf.keras.models.loadmodel('epicnumreader.model')

测试加载的模型

predictions = newmodel.predict(xtest) print(np.argmax(predictions[0])) ```

以上便是使用TensorFlow和Keras进行手写数字识别的基本流程。希望对您有所帮助!

    本文来源:图灵汇
责任编辑: : 大plane
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
辨认手写Tensorflow搞定机器数字学习day39Keras100
    下一篇