文 / 李锡涵,Google Developers Expert
本文节选自《简单粗暴 TensorFlow 2.0》

在 《【入门教程】TensorFlow 2.0 模型:模型类的建立》 里,我们简要介绍了 TensorFlow 2.0 中建立模型类的方法。本文即以多层感知机(Multilayer Perceptron, MLP),或者说 “多层全连接神经网络” 为例,给出一个具体示例,详细介绍 TensorFlow 2.0 的模型构建、训练、评估的全流程。在这一部分,我们依次进行以下步骤:
-
使用
tf.keras.datasets获得数据集并预处理 -
使用
tf.keras.Model和tf.keras.layers构建模型 -
构建模型训练流程,使用
tf.keras.losses计算损失函数,并使用tf.keras.optimizer优化模型 -
构建模型评估流程,使用
tf.keras.metrics计算评估指标
基础知识和原理
UFLDL 教程 | 神经网络 一节
斯坦福课程 CS231n: Convolutional Neural Networks for Visual Recognition 中的 “Neural Networks Part 1 ~ 3” 部分。
这里,我们使用多层感知机完成 MNIST 手写体数字图片数据集 [LeCun1998] 的分类任务。

MNIST 手写数字图片示例
数据获取及预处理:tf.keras.datasets
先进行预备工作,实现一个简单的 MNISTLoader 类来读取 MNIST 数据集数据。这里使用了 tf.keras.datasets 快速载入 MNIST 数据集。
1class MNISTLoader():
2 def __init__(self):
3 mnist = tf.keras.datasets.mnist
4 (self.train_data, self.train_label), (self.test_data, self.test_label) = mnist.load_data()
5 # MNIST中的图像默认为uint8(0-255的数字)。以下代码将其归一化到0-1之间的浮点数,并在最后增加一维作为颜色通道
6 self.train_data = np.expand_dims(self.train_data.astype(np.float32) / 255.0, axis=-1) # [60000, 28, 28, 1]
7 self.test_data = np.expand_dims(self.test_data.astype(np.float32) / 255.0, axis=-1) # [10000, 28, 28, 1]
8 self.train_label = self.train_label.astype(np.int32) # [60000]
9 self.test_label = self.test_label.astype(np.int32) # [10000]
10 self.num_train_data, self.num_test_data = self.train_data.shape[0], self.test_data.shape[0]
11
12 def get_batch(self, batch_size):
13 # 从数据集中随机取出batch_size个元素并返回
14 index = np.random.randint(0, np.shape(self.train_data)[0], batch_size)
15 &nbs

本文介绍了如何使用 TensorFlow 2.0 构建、训练和评估多层感知机(MLP)模型,通过MNIST数据集进行手写数字识别。内容涵盖数据预处理、模型构建(包括ReLU激活函数和softmax输出)、损失函数(交叉熵)和优化器(Adam),以及模型评估的准确率计算。
最低0.47元/天 解锁文章
4360

被折叠的 条评论
为什么被折叠?



