目录
12.1 小批量梯度下降法
1.批量梯度下降法
每次迭代使用所有样本计算偏导数,不适合大规模数据集
2.随机梯度下降
每次迭代只使用一个样本训练模型,需要训练多轮,无法快速收敛
3.小批量梯度下降
将数据分为多个小批量,每次迭代使用一个小批量来训练模型
损失函数:
t:每批样本数量
公式:
需要多轮训练,每次迭代的训练样本数固定
4.三种算法等高线图![](https://i-blog.csdnimg.cn/blog_migrate/25e68997bd30145e584a2a123997f20c.png)
12.2 梯度下降法的优化
非凸函数具有多个局部最优点,在局部极小值点,梯度接近于0,迭代停止,因此多层神经网络使用梯度下降法,无法保证达到最小值点
影响小批量梯度下降法的因素:
1.样本的选择
在每轮训练前,打乱样本顺序
2.批量数
在使用GPU时,使用2的幂数作为批量中的样本数
3.学习率
凸函数中,可以使用学习率衰减,开始训练时设置较大的学习率,加快收敛速度。在迭代过程中,学习率随着迭代次数逐渐减小,避免震荡
非凸函数中,可以周期性的增大学习率或自适应调整学习率
自适应学习率算法:
(1)AdaGrad
(2)RMSprop、AdaDelta
4.梯度
(1)动量梯度下降法
(2)牛顿加速梯度算法
12.3 keras和tf.keras
12.4 Sequential模型
建立模型
添加层
查看摘要
1.构建模型
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 8) 40
_________________________________________________________________
dense_1 (Dense) (None, 4) 36
_________________________________________________________________
dense_2 (Dense) (None, 3) 15
=================================================================
Total params: 91
Trainable params: 91
Non-trainable params: 0
2.配置训练方法
损失函数
优化器
评价指标
3.训练模型
默认值
4.评估模型
5.使用模型
12.5 实例:手写字体识别
设计结构
手写字体为28*28,展开为784的张量,因此输入层有784个单元。
输出层为10个单元,分别对应0-9,使用softmax
隐含层设计128个单元,使用relu
实现代码
#import library
from logging import logProcesses
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
#load dataset
mnist=tf.keras.datasets.mnist
(train_x,train_y),(test_x,test_y)=mnist.load_data()
#data preprocessing
# X_train=train_x.reshape((60000,28*28))
# X_test=test_x.reshape((10000,28*28))
# Convert two-dimensional array to one-dimensional array
X_train,X_test=tf.cast(train_x/255.0,tf.float32),tf.cast(test_x/255.0,tf.float32) #normalization
y_train,y_test=tf.cast(train_y,tf.int16),tf.cast(test_y,tf.int16)
#set model
model=tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dense(10,activation='softmax'))
#configure training methods
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['sparse_categorical_accuracy'])
#training model
model.fit(X_train,y_train,batch_size=64,epochs=5,validation_split=0.2)
#evaluation model
model.evaluate(X_test,y_test,verbose=2)
#use model
plt.axis('off')
plt.imshow(test_x[0],cmap='gray')
plt.show()
#distinguish
model.predict([[X_test[0]]])
np.argmax(model.predict([[X_test[0]]]))
for i in range(4):
plt.subplot(1,4,i+1)
plt.axis('off')
plt.imshow(test_x[i],cmap='gray')
plt.title(test_y[i])
plt.show()
model.predict(X_test[0:4])
np.argmax(model.predict(X_test[0:4]),axis=1)
12.6 模型的保存和加载
1.保存模型参数
2.加载模型参数
3.保存整个模型
4.加载模型