六步法实现模型搭建
- 导入相关模块
- 导入训练集与测试集
- 搭建网络结构
- 配置训练方法
- 执行训练方法
- 打印出网络结构,参数统计
基本元素介绍
一、激活函数
激活函数是用来加入非线性因素的,因为线性模型的表达能力不够。引入非线性激活函数,可使深
层神经网络的表达能力更加强大。激活函数非线性时,多层神经网络可逼近所有函数
常见的激活函数有 sigmoid、relu、softmax
小提示:平时在使用时,最后输出用softmax,其余基本都用relu
二、损失函数
神经网络模型的效果及优化的目标是通过损失函数来定义的。回归和分类是监督学习中的两个大
类。
1. 均方误差损失函数:API:tf.keras.losses.MSE
回归问题中最常用的损失函数,回归问题解决的是对具体数值的预测,比如房价预测、销量预测等。这些问题需要预测的不是一个事先定义好的类别,而是一个任意实数。
2. 交叉熵损失函数:API: tf.keras.losses.categorical_crossentropy,tf.nn.softmax_cross_entropy_with_logits, tf.nn.sparse_softmax_cross_entropy_with_logits
交叉熵(Cross Entropy)表征两个概率分布之间的距离,交叉熵越小说明二者分布越接近,是分 类问题中使用较广泛的损失函数。
3. 自定义损失函数
针对特定的任务和目的设计。
三、优化器
所谓的优化器,就是tensorflow中梯度下降的策略,用于更新神经网络中数以百万的参数。
常见优化器有:SGD梯度下降、RMSrop、Adagrad、Adam、Adadelta 等
需根据不同情况选用最合适的优化器,一般优先考虑Adam 或 SGD+Nesterov Mometum
利用六步法编写的模型代码如下
其中关键处见注释
#六步法实现模型搭建
#1.导入相关模块
import tensorflow as tf
#2.导入数据
mnist = tf.keras.datasets.mnist
#(训练集输入特征,训练集标签),(测试集输入特征,测试机标签)
(x_train, y_train), (x_test, y_test) = mnist.load_data()#导入数据集
x_train, x_test = x_train / 255.0, x_test / 255.0#对输入网络的输入特征进行归一化,将原本0~255的灰度值变为0~1的值,输入特征的数值变小更适合神经网络吸收
#3.用Sequential搭建网络结构
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),#将数组拉直,有784个神经元
tf.keras.layers.Dense(128, activation='relu'),#128个神经元的全连接层
tf.keras.layers.Dense(10, activation='softmax')#因为是10分类,故需要经过一个10分类的全连接层
])
#4.用compile配置训练方法
model.compile(optimizer='adam',#优化器,优先考虑Adam或者SGD+Nesterov Momentum
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),#设置损失函数
metrics=['sparse_categorical_accuracy'])#选择标注网络评测指标
#5.用fit执行训练过程
model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
#6.用summary打印出网络结构,和参数统计
model.summary()