本篇文章有助於了解梯度下降。這裡用函式的變數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...