赞
踩
如下图:
从图中的碗一样的图中可以看出有4个极值点,那么经过优化后,会有4个结果。
4个点的结果见下图:
源码:
import numpy as np from mpl_toolkits.mplot3d import Axes3D from matplotlib import pyplot as plt import torch def himmelblau(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,y range:', x.shape, y.shape) X, Y = np.meshgrid(x, y) print('X,Y maps:', X.shape, Y.shape) Z = himmelblau([X, Y]) fig = plt.figure('himmelblau') ax = fig.gca(projection='3d') ax.plot_surface(X, Y, Z) ax.view_init(60, -30) ax.set_xlabel('x') ax.set_ylabel('y') plt.show() # [1., 0.], [-4, 0.], [4, 0.] x = torch.tensor([-4., 0.], requires_grad=True) optimizer = torch.optim.Adam([x], lr=1e-3) for step in range(20000): pred = himmelblau(x) optimizer.zero_grad() pred.backward() optimizer.step() if step % 2000 == 0: print ('step {}: x = {}, f(x) = {}' .format(step, x.tolist(), pred.item()))
从执行结果看当分别使用[1., 0.], [-4, 0.], [4, 0.]初始化x的时候,输出下图中不同的结果:
因此不同的初始值会产生不同的结果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。