TensorFlow实现MNIST手写数字识别:全连接神经网络(一)

作者:搬砖的石头2024.02.16 17:20浏览量:25

简介:本系列文章将介绍如何使用TensorFlow实现MNIST手写数字识别,通过全连接神经网络进行训练和预测。我们将分三部分完成这个案例,本篇为第一部分,主要介绍数据准备和网络构建。

在开始之前,请确保您已经安装了TensorFlow库。如果尚未安装,请先执行以下命令安装:

  1. pip install tensorflow

在第一部分中,我们将完成以下任务:

  1. 导入必要的库和模块。
  2. 加载MNIST数据集。
  3. 构建全连接神经网络模型。
  4. 编译模型并进行初步训练。

首先,我们导入所需的库和模块:

  1. import tensorflow as tf
  2. from tensorflow.keras.datasets import mnist
  3. from tensorflow.keras.models import Sequential
  4. from tensorflow.keras.layers import Dense, Flatten
  5. from tensorflow.keras.utils import to_categorical

接下来,我们加载MNIST数据集。MNIST是一个手写数字的大型数据库,包含60,000个训练样本和10,000个测试样本。每个样本都是一个28x28的灰度图像和一个对应的标签(即手写数字)。

  1. (x_train, y_train), (x_test, y_test) = mnist.load_data()

现在,我们将对数据进行预处理。首先,我们将图像数据展平,以便输入到全连接层中:

  1. x_train = x_train.reshape(-1, 28 * 28) / 255.0 # 归一化像素值到0-1之间
  2. x_test = x_test.reshape(-1, 28 * 28) / 255.0 # 归一化像素值到0-1之间

然后,我们将标签进行one-hot编码:

  1. y_train = to_categorical(y_train) # one-hot编码
  2. y_test = to_categorical(y_test) # one-hot编码

接下来,我们构建全连接神经网络模型。我们使用Sequential模型来定义网络结构:

  1. model = Sequential([ # 构建模型层数顺序,每一层定义好参数即可生成模型。例如:[64]即第一层神经元有64个。后续几层神经元个数依次类推。每一层定义时可以指定激活函数、输入维度等参数。具体可参考tensorflow文档。此处只是示例代码,可能需要根据实际任务调整网络结构。
  2. Flatten(input_shape=(28, 28)), # 将输入的28x28图像展平为一维向量
  3. Dense(64, activation='relu'), # 第一层全连接层,64个神经元,使用ReLU激活函数
  4. Dense(64, activation='relu'), # 第二层全连接层,64个神经元,使用ReLU激活函数
  5. Dense(10, activation='softmax') # 输出层,10个神经元,使用softmax激活函数进行分类预测
  6. ])

最后,我们编译模型并进行初步训练:

  1. model.compile(optimizer='adam', # 使用Adam优化器进行优化求解过程,对学习率和动量参数进行了默认设置。具体可参考tensorflow文档。此处只是示例代码,可能需要根据实际任务调整优化器参数。
  2. loss='categorical_crossentropy', # 使用交叉熵作为损失函数,进行多分类问题的求解。具体可参考tensorflow文档。此处只是示例代码,可能需要根据实际任务调整损失函数。
  3. metrics=['accuracy']) # 在训练过程中显示训练集上的准确率指标。具体可参考tensorflow文档。此处只是示例代码,可能需要根据实际任务调整指标参数。