神经网络与深度学习 Class 12:人工神经网络(下)

目录

12.1 小批量梯度下降法

1.批量梯度下降法

2.随机梯度下降

3.小批量梯度下降 

4.三种算法等高线图​

12.2 梯度下降法的优化

1.样本的选择

2.批量数

3.学习率

4.梯度

12.3 keras和tf.keras

12.4 Sequential模型

1.构建模型

2.配置训练方法

​3.训练模型 

4.评估模型

5.使用模型

12.5 实例:手写字体识别

设计结构

实现代码

12.6 模型的保存和加载

1.保存模型参数

2.加载模型参数 

3.保存整个模型 

4.加载模型 


12.1 小批量梯度下降法

1.批量梯度下降法

每次迭代使用所有样本计算偏导数,不适合大规模数据集

2.随机梯度下降

每次迭代只使用一个样本训练模型,需要训练多轮,无法快速收敛

3.小批量梯度下降 

将数据分为多个小批量,每次迭代使用一个小批量来训练模型

损失函数:

t:每批样本数量

公式:

 需要多轮训练,每次迭代的训练样本数固定 

4.三种算法等高线图

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.加载模型 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值