本节课目标:分享神经网络的搭建八股,用“六步法”, 不到20行代码,写出手写数字识别训练模型。
使用TensorflowAPI:tf.keras搭建网络八股。tf.keras是tensorflow2引入的高封装度的框架,可以用于快速搭建神经网络模型,keras为支持快速实验而生,能够把想法迅速转换为结果,是深度学习框架之中最终易上手的一个,它提供了一致而简洁的API,能够极大地减少一般应用下的工作量,提高代码地封装程度和复用性。
3.1 搭建网络八股Sequential
第一步:import相关模块,如import tensorflow as tf。
第二步:指定输入网络的训练集和测试集,如指定训练集的输入x_train和标签y_train,测试集的输入x_test和标签y_test。
第三步:逐层搭建网络结构,model = tf.keras.models.Sequential()。
第四步:在model.compile()中配置训练方法,选择训练时使用的优化器、损失函数和最终评价指标。
第五步:在model.fit()中执行训练过程,告知训练集和测试集的输入值和标签、每个batch的大小(batchsize)和数据集的迭代次数(epoch)。
第六步:使用model.summary()打印网络结构,统计参数数目。
3.1.1 model=tf.keras.models.Sequential([网络结构]):
Sequential函数是一个容器,描述了神经网络的网络结构,在Sequential函数的输入参数中描述从输入层到输出层的网络结构。
3.1.2 model.compile(optimizer = 优化器, loss = 损失函数, metrics = [“准确率”] ):
Compile用于配置神经网络的训练方法,告知训练时使用的优化器、损失函数和准确率评测标准。
3.1.3 model.fit():
fit函数用于执行训练过程。
3.1.4model.summary():
summary函数用于打印网络结构和参数统计。
上图是model.summary()对鸢尾花分类网络的网络结构和参数统计,对于一个输入为4输出为3的全连接网络,共有15个参数。
接下来看一下使用着六步法,怎么实现鸢尾花分类:
# 一
import tensorflow as tf
from sklearn import datasets
import numpy as np
# 二
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target
np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)
# 三
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
])
# 四
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])
# 五
model.fit(x_train, y_train, batch_size=32, epochs=