说明
- 这是一个关于TensorFlow的基础教程
- 本任务主要是基于TensorFlow实现对于MNIST数据集的处理
- 通过本任务,希望大家能够了解TensorFlow构建神经网络的大致过程
-
MNIST数据集展示
mnist数据集
训练过程
-
导入相关包以及载入数据
导入数据
-
查看样本数据
数据查验
-
查看多个数据
多样本查验
-
数据归一化(深度学习模型处理 0 至 1 之间的数字时更加得心应手(后面会有详细介绍),所以我们会取全部像素值,并用每个值除以 255。我们将此过程称为归一化。)
特征归一化
-
标签序列化(将标量转换成向量):
标签序列化
-
搭建模型
搭建模型
-
模型编译
模型编译
-
模型训练
模型训练
完整代码
# ===========导入数据集==========
from tensorflow.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# ==========查看数据=========
import matplotlib.pyplot as plt
image = x_train[0]
label = y_train[0]
plt.imshow(image, cmap="gray")
plt.title(label, fontdict={'fontsize': 30})
# ==========数据预处理(归一化)==========
## 以下两种方式等价(第一个是具体公式,第二个是简便写法)
x_train = (x_train - x_train.min()) / (x_train.max() - x_train.min())
x_test = x_test / 255
# ==========对标签进行多分类编码(变量转向量)==========
import tensorflow.keras as keras
print("format y_train[0] is ", y_train[0])
num_categories = 10 # 0~9一共有10个数字
# 将标量转换成向量
y_train = keras.utils.to_categorical(y_train, num_categories)
y_test = keras.utils.to_categorical(y_test, num_categories)
print("after encoding, y_train[0] is ", y_train[0])
# ===============创建模型==================
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model = Sequential()
# 输入层
"""
units参数指定该层中神经元的数量。 这里使用512,这是一个很好的起始值。也可以稍后修改此值来查看它如何影响训练结果。
activation:激活函数,这里将使用relu激励函数,它将帮助我们的网络做出比使用线性激励函数更为复杂的预测
input_shape值指定输入数据的形状/维度。
"""
model.add(Dense(units=512, activation='relu', input_shape=(784,))) # 输入变量有784维
# 隐藏层
model.add(Dense(units = 512, activation='relu'))
# 输出层
"""
该层使用softmax激励函数,该函数将使该层的每个输出值是0到1之间的概率值,并且该层的所有输出相加等于1。
在这种情况下,由于网络要对一个图像属于0到9中的一个进行预测,所以一共有10个输出,每个输出都会给出模型对图像属于某个类的猜测值(概率)
因此,softmax较适用于需要分类的应用场景。
"""
model.add(Dense(units = 10, activation='softmax')) # 输出有10个类别,激活函数使用softmax
# 模型总结
model.summary()
# ==========模型编译==========
"""
在实际使用数据训练模型之前,我们需要做的最后一步是对模型进行编译。
在这里,我们要指定一个损失函数,模型将用该函数来了解其在训练过程中的表现。我们还要指定在模型训练时我们将要跟踪准确率
"""
model.compile(loss='categorical_crossentropy', metrics=['accuracy'])
# ==========训练模型==========
"""
x_train, y_train:分别是训练数据和训练标签;
epochs:表示在整个训练数据集上进行训练的次数;
verbose=1:显示训练过程和日志信息
validation_data:校验数据,每一个训练完模型都会使用校验数据进行检查
"""
model.fit(x_train, y_train,
epochs=5,
verbose=1,
validation_data=(x_test, y_test)
)
网友评论