使用梯度下降求函式的極小值

2021-10-24 16:15:40 字數 1219 閱讀 3346

本篇文章有助於了解梯度下降。這裡用函式的變數x和y進行梯度下降,目標是求函式的極小值。而深度學習中是對權重w和偏置值b進行梯度下降,目標是求損失函式的極小值。

import numpy as np

from mpl_toolkits.mplot3d import axes3d

from matplotlib import pyplot as plt

import torch

# 目標函式

def fun(x):

return (x[0] ** 2 + x[1] - 11) ** 2 + (x[0] + x[1] ** 2 - 7) ** 2

x = np.arange(-6, 6, 0.1)

y = np.arange(-6, 6, 0.1)

# print(x)

# print(type(x))

print('x,y range:', x.shape, y.shape)

x, y = np.meshgrid(x, y)

# print(x)

print('x,y maps:', x.shape, y.shape)

z = fun([x, y])

# 對函式進行視覺化

fig = plt.figure('fun')

ax = fig.gca(projection='3d')

ax.plot_su***ce(x, y, z)

ax.view_init(60, 30)

ax.set_xlabel('x')

ax.set_ylabel('y')

# 對x賦初值,不同的初始值可能得到的極小值不一樣

x = torch.tensor([4., 0.], requires_grad=true)

optimizer = torch.optim.adam([x], lr=1e-3)

for step in range(20000):

pred = fun(x)

optimizer.zero_grad()

pred.backward()

optimizer.step()

if step % 2000 == 0:

print('step{} : x = {}, f(x) = {}'.format(step, x.tolist(), pred.item()))

plt.show()

最速下降法(適用於求二階極小值)

最速下降法步驟 給 min,初始點 x0 a0,b0 t,精度 過程 求出求出下降方向d,步長 下降方向 d f x 下次更新x的最優步長 x f x d 0 過程 更新x x1 x0 d0 過程 當 f x 則停,最小值x x 最速下降法 精確搜尋 import sympy import nump...

memset各型別的極大極小值

include int main 較 的原則 加法不爆。極大值 0x7f 較大值 0x3f 較小值 0xc0 極小值 0x80 較 的原則 加法不爆。極大值 0x7f 較大值 0x3f 較小值 0xc0 極小值 0x80 較 的原則 保證一定位精度。7f以上一直到be都是 0 實際上是乙個很小的 1...

Newton法(求適用於二階極小值)

給 minf x 初始點 x0 過程 求出下降方向d 2 f x0 d f x0 過程 更新x x1 x0 d 過程 f x 則得到x x import matplotlib.pyplot as plt import sympy import numpy as np plt.rcparams fon...