1:2D函数Himmelblau
(1)用3D曲线表示2D函数
4个最小解
(2)pytorch中寻找最小解
第一步:先将2D函数Himmelblau用pytorch实现,并且将其进行可视化
【注】x,y分别是一个点的x坐标和y坐标。np.meshgrid(x,y)可以实现将x,y的范围传入其中。X和Y两张map分别存储了x,y,其形状分别为shape为【120,120】的tensor,两个map相同处拼接x,y构成一个点坐标(x,y)。
X,Y即为点的横坐标和纵坐标。
第二步:
[注]torch.optim优化算法之optim.Adam()详细参考https://blog.csdn.net/kgzhang/article/details/77479737
上图调用该优化算法之后通过step()函数可以实现如下步骤对进行更新:
【注本人也不太理解】optimizer.zero_grad()梯度归零原因:因为训练的过程通常使用mini-batch方法,所以如果不将梯度清零的话,梯度会与上一个batch的数据相关,因此该函数要写在反向传播和梯度下降之前。
[注]pred.backward()是求解x,y的梯度。即:预测试pred对x,y进行微分,对x,y进行优化,得到最小pred.