机器学习:【7】学习速率设置实践

学习速率:

对梯度进行缩放的参数被称为学习速率(learning rate),需要进行人为规定(被称为超参数),可以通过查看损失函数的曲线来判断学习速率的设置是否合理。

例如:如果震荡,说明学习速率过大。

反向传播算法:

一种高效计算数据流图中梯度的技术,会把梯度反向传播到每一层,进行梯度下降。

常见优化函数:

SGD:随机梯度下降优化器。

RMSprop:常用来处理序列问题,增加了衰减系数控制历史信息的获取多少,会对学习率进行衰减。(除了lr之外,其他建议使用默认参数),通常是训练循环神经网络的不错选择

Adam:可看作是修正后的前两种算法之和,对超参数相当鲁棒

#本代码基于tensorflow2.0
#使用的为Fashion MNIST数据集
#使用loss函数为sparse_categorical_crossentropy
 
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
 
#1 导入数据
(train_image, train_lable), (test_image, test_label) = tf.keras.datasets.fashion_mnist.load_data()
train_image.shape #查看图片的格式
train_lable.shape #查看图片标签
test_image.shape, test_label.shape #查看测试集图片格式和标签
plt.imshow(train_image[0]) #查看其中一个图片
np.max(train_image[0]) #可以看出图片的颜色最大值为255
 
train_image = train_image/255 #这两行用来将数据进行归一化,都变成0-1之间的数
test_image = test_image/255
 
#2 建立模型
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))  
#因为28*28的数据是不能够进行Dense运算的,要用上面一行转化为一维数据(扁平化为很长的向量)
model.add(tf.keras.layers.Dense(128, activation='relu')) #一个隐藏层
model.add(tf.keras.layers.Dense(10, activation='softmax')) #输出一个概率值
model.summary()
 
#3 模型编译
model.compile(optimizer= tf.keras.optimizers.Adam(learning_rate=0.01), #设置学习速率为0.01
              loss='sparse_categorical_crossentropy', #数字编码要使用这个loss函数
              metrics=['acc']
)
 
#4 模型训练
model.fit(train_image, train_lable, epochs=5)
 
#5 模型评价
model.evaluate(test_image, test_label) #在测试集上进行评价

你可能感兴趣的:(深度学习,优化器,学习速率设置,反向传播算法)