深度学习(非线性优化)

之前做非线性优化一般都是求雅可比矩阵或者数值求导,然后通过高斯牛顿或者LM迭代求解。

这次用pytorch中的方法求解试试。

下面给一个用pytorch求解的代码,例子是之前文章中的。

复制代码
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np

a = [1.0, 2.0, 1.0]
x = np.linspace(start=0, stop=1, num=100)
y = np.exp(a[0]*x*x+a[1]*x+a[2])

par = torch.tensor([0.0, 0.0, 0.0], requires_grad=True)

x = torch.tensor(x)
y = torch.tensor(y)

optimizer = optim.Adam([par], lr=0.4)
lossfun = nn.MSELoss()

for step in range(1000):
    # 前向传播
    outputs = torch.exp(par[0]*x*x+par[1]*x+par[2])
    loss = lossfun(outputs, y)

    # 反向传播和优化
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    if step % 10==0:
        print(loss.item())

print('result:', par.detach().numpy())
复制代码

结果也是可以收敛到原始参数上的。

区别应该在于如果有很好的数学求导模型时,依靠雅可比矩阵能够更快的收敛,方便实时计算。

而对于图像识别等更复杂的无法求雅可比矩阵的问题,可以用pytorch提供的各种优化工具求解。

posted @   Dsp Tian  阅读(110)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2022-10-29 matlab练习程序(box-cox变换)
2012-10-29 linux命令行关机
点击右上角即可分享
微信分享提示