深度学习17:深度神经网络:测试参数优化器效果

目录标题

一、测试代码及效果

需要的引入代码在

深度学习15:深度神经网络:存在的问题和参数优化(Momentum和学习衰减率)

深度学习16:深度神经网络:参数优化(AdaGrad,RMSProp,Adam)

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from collections import OrderedDict  # 有序字典
from blog:深度学习15:深度神经网络:存在的问题和参数优化(Momentum和学习衰减率) import SGD,Momentum
from blog:深度学习16:深度神经网络:参数优化(AdaGrad,RMSProp,Adam) import AdaGrad,Adam

# 定义目标函数: f(x, y) = 1/20 x^2 + y^2
def f(x, y):
    return x ** 2 / 20 + y ** 2

# 定义梯度计算方法,得到一个长度为2的向量
def f_grad(x, y):
    return x / 10, 2 * y

# 定义初始点位置
init_pos = (-7.0, 2.0)

# 定义参数和梯度
params = {}
grads = {}

# 定义优化器,指定学习率
optimizers = OrderedDict()
optimizers['SGD'] = SGD(lr=0.1)
optimizers['Momentum'] = Momentum(lr=0.1)
optimizers['AdaGrad'] = AdaGrad(lr=0.1)
optimizers['Adam'] = Adam(lr=0.1)

idx = 1  # 子图序号

# 遍历优化器,用优化器更新参数求解最小值点
for key in optimizers:
    optimizer = optimizers[key]
    # 记录参数点更新的历史
    x_history = []
    y_history = []
    
    # 参数初始化
    params['x'], params['y'] = init_pos[0], init_pos[1]
    
    # 指定迭代 30 次
    for i in range(30):
        # 先保存当前点坐标
        x_history.append(params['x'])
        y_history.append(params['y'])
        
        # 1. 计算梯度
        grads['x'], grads['y'] = f_grad(params['x'], params['y'])
        
        # 2. 更新参数
        optimizer.update(params, grads)

    # 画图
    x = np.arange(-10, 10, 0.01)
    y = np.arange(-5, 5, 0.01)
    X, Y = np.meshgrid(x, y)
    Z = f(X, Y)
    Z[Z > 7] = 0  # Z高度大于7的部分不画
    
    # 定义子图
    plt.subplot(2, 2, idx)
    idx += 1
    
    # 绘制等高线
    plt.contour(X, Y, Z)
    
    # 单独画出最小值点
    plt.plot(0, 0, '+')
    
    # 画出点轨迹曲线
    plt.plot(x_history, y_history, 'o-', color='red', markersize=2, label=key)
    plt.xlim(-10, 10)
    plt.ylim(-5, 5)
    plt.legend(loc='best')

plt.show()

学习率小(0.1),循环次数少(30次),导致大部分参数优化器都没到最优参数点,但是Momentum都冲过了

学习率小(0.1),循环次数多点(50次),导致大部分参数优化器都没到最优参数点,但是Momentum都冲过了,发现冲过了,在最优参数点来回震荡

学习率变大为(1),循环次数多点(50次),学习率大,AdaGrad表现最好,SGD都来回震荡无法收敛了,momentum和Adam可以收敛。可见Adam是momentum和AdaGrad融合技

下面参数(目前为止只是修改循环次数和学习率大小,但是每个参数优化器还有别的参数可以配置), 问题:Adam没到(要不加循环次数,要不加学习率),Adam 训练过了(让冲的小点),momentum冲还是过了(让冲的小点)

学习率 SDG 为0.9

学习率 Momentum 为0.08

学习率 AdaGrad 为1

学习率 Adam 为0.5

循环次数(30次)

利用别的参数解决问题:

让momentum 动量系数衰减,Adam加大学习率,Adam也减小冲量

二、总结

nothing

相关推荐
苏离~Hack1 小时前
10月26日AI真正的大事:Agent 的笼子,开始用钢板焊
人工智能
GlobalInfo1 小时前
全球防爆轮式巡检机器人行业研究:安全生产需求、产品升级与智能运维趋势
人工智能·安全·机器人
不一样的故事1261 小时前
Prompt 工程(Prompt Engineering)
前端·人工智能·python
Rock Chin6971 小时前
LangBot 群机器人:三个 AI 角色分工迎新人、答群规、管广告
人工智能·机器人·开源·自动化
Flynn Liang1 小时前
保姆级|Spring AI 2.0 第一个 Demo:Spring Boot 4 接入大模型(含国内可用方案 + 完整 pom)
人工智能·spring·ollama·springai·deepseek·springai入门·java接入大模型
neocheng_5221 小时前
AI证书含金量的5个判断维度:考核、学习、应用与认可情况
人工智能
MindUp1 小时前
AI 能帮我做数据分析吗?从使用场景看三类辅助方式
人工智能·数据挖掘·数据分析
Angeldream1231 小时前
第 9 章 医学影像项目实战
大数据·图像处理·人工智能·python·医学影像处理
金海星科技1 小时前
人工智能赋能船舶交通管理中心的值守转型探析
人工智能·语音识别