方法一写法:
#f(x,y)=(x**2+y-11)**2+(x+y**2-7)**2
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Ddef himmelblau(x):#函数实现,传入参数x为两个元素的listreturn (x[0]**2+x[1]-11)**2+(x[0]+x[1]**2-7)**2x=np.arange(-6,6,0.1)#可视化的x的坐标范围-6-6
y=np.arange(-6,6,0.1)#可视化的y的坐标范围-6-6
print("x,y range;",x.shape,y.shape)
#生成x-y平面采样点网格点,方便可视化X,Y=np.meshgrid(x,y)
print('X,Y maps:',X.shape,Y.shape)Z=himmelblau([X,Y])#计算网络个点上的函数值
#绘制himmelblau函数曲面
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()
输出
x,y range; (120,) (120,)
X,Y maps: (120, 120) (120, 120)

方法二写法:#f(x,y)=(x**2+y-11)**2+(x+y**2-7)**2
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Ddef himmelblau(x):#函数实现,传入参数x为两个元素的listreturn (x[0]**2+x[1]-11)**2+(x[0]+x[1]**2-7)**2x=np.arange(-6,6,0.1)#可视化的x的坐标范围-6-6
y=np.arange(-6,6,0.1)#可视化的y的坐标范围-6-6
print("x,y range;",x.shape,y.shape)
#生成x-y平面采样点网格点,方便可视化X,Y=tf.meshgrid(x,y)
print('X,Y maps:',X.shape,Y.shape)Z=himmelblau([X,Y])#计算网络个点上的函数值
print(Z)
#绘制himmelblau函数曲面
fig=plt.figure('himmelblau')
ax=Axes3D(fig)#设置三位坐标轴
ax.contour3D(X.numpy(),Y.numpy(),Z.numpy(),50)#三位曲面图
ax.view_init(60,-30)
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show()

利用tensorflow自动求导功能,对x,y求偏导数,并循环迭代更新x,y.

import tensorflow as tf
import numpy as nplr=0.01#学习率
def himmelblau(x):return (x[0]**2+x[1]-11)**2+(x[0]+x[1]**2-7)**2x=tf.constant([4.,0.])#初始化参数for step in range(200):#循环优化200次with tf.GradientTape() as tape:#梯度跟踪tape.watch([x])#加入梯度跟踪列表y=himmelblau(x)#向前计算grades=tape.gradient(y,[x])[0]x-=lr*grades#打印优化的极小值if step%20==0:print('step{}:x={},f(x)=={}'.format(step,x.numpy(),y.numpy()))step0:x=[ 3.26       -0.09999999],f(x)==34.0
step20:x=[ 3.54679   -1.4388103],f(x)==2.747403860092163
step40:x=[ 3.5843565 -1.8473401],f(x)==1.7569736883160658e-05
step60:x=[ 3.5844283 -1.8481257],f(x)==2.3646862246096134e-11
step80:x=[ 3.5844283 -1.8481264],f(x)==2.2737367544323206e-13
step100:x=[ 3.5844283 -1.8481264],f(x)==2.2737367544323206e-13
step120:x=[ 3.5844283 -1.8481264],f(x)==2.2737367544323206e-13
step140:x=[ 3.5844283 -1.8481264],f(x)==2.2737367544323206e-13
step160:x=[ 3.5844283 -1.8481264],f(x)==2.2737367544323206e-13
step180:x=[ 3.5844283 -1.8481264],f(x)==2.2737367544323206e-13

Himmelblau函数优化实战相关推荐

  1. 深度学习(31)随机梯度下降九: Himmelblau函数优化实战

    深度学习(31)随机梯度下降九: Himmelblau函数优化实战 1. Himmelblau函数 2. 函数优化实战 1. Himmelblau函数 Himmelblau函数是用来测试后话算法的常用 ...

  2. R语言optim函数进行函数优化实战(和lm函数进行对比)

    R语言optim函数进行函数优化实战(和lm函数进行对比) 目录 R语言optim函数进行函数优化实战(和lm函数进行对比) #仿真数据

  3. Django中prefetch_related()函数优化实战指南

    对于多对多字段(ManyToManyField)和一对多字段, 可以使用prefetch_related()来进行优化 prefetch_related()和select_related()的设计目的 ...

  4. R语言optimize函数一维优化实战

    R语言optimize函数一维优化实战 目录 R语言optimize函数一维优化实战 #基础语法 #优化用户自定义的函数

  5. 深度学习与神经网络(三)——多层感知机 反向传播 优化实战

    介绍一个完完整整的,与我们实际使用一摸一样的多层感知机的反向传播方式 多层感知机MLP & 反向传播 与多输出感知机相比 有多层节点(绿色的) δkk是由Okk和tk得到的 所以δ一共有k个 ...

  6. 收藏起来,史上最全的 MySQL 高性能优化实战总结!

    一.前言 MySQL 对于很多 Linux 从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行 MySQL 的优化之前必须要了解的就是 MySQL 的查询 ...

  7. Android主线程耗时动画卡顿,Android性能优化实战之界面卡顿

    原标题:Android性能优化实战之界面卡顿 作者:红橙Darren https://www.jianshu.com/p/18bb507d6e62 今天是个奇怪的日子,有三位同学找我,都是关于界面卡顿 ...

  8. 史上最全的MySQL高性能优化实战总结!

    https://www.jianshu.com/p/4af41b682e06 1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思 ...

  9. 22_2D函数优化实例

    1.19. 2D函数优化实例 为了演示优化神经网络参数得到loss极小值的过程,和不同初始值可能产生不同的极值点,在此引入了如下图所示函数: 从图中可以看出该函数2D图像呈碗状,有四个极小值点,它的极 ...

最新文章

  1. Python学习札记(六)
  2. python代码需要背吗-python程序需要编译吗
  3. android之音乐播放和音效播放
  4. 第八届蓝桥杯-日期问题
  5. 用Unix的设计思想来应对多变的需求
  6. 关于解决织梦文档栏目删除后ID 从1开始的方法
  7. 担心再次被起诉?马斯克已删除特斯拉可能几个月内成为最大公司推文
  8. mysql 视图没主键,mysql创建视图后打开提示没有主键,mysql视图
  9. 初始runtime(运行时机制)
  10. HTTP和RPC的区别
  11. MP3参数,格式,术语有关一切内容详解
  12. python读取批量txt文件
  13. 初识EMC元器件(五)——电容参数解读及选型应用
  14. 新随笔--读书笔记《学会提问》:学习提出好问题的思维方法
  15. java基于ssm+vue网上考试报名系统 element
  16. WampServer安装教程、相关问题和检验
  17. java启动脚本指定jdk_使用指定的JDK启动IDEA的三种方法
  18. win10 进入system账户权限
  19. 实现表格行的拖拽以及分页
  20. ABB REF601 CE446BB1NH 馈线保护控制继电器

热门文章

  1. MySQL数据库聚合函数(count、max、min、sum、avg)
  2. Selenium提取数据之标签对象提取文本内容和属性值
  3. python中读取文件过程中seek()函数的使用
  4. 几句代码 修改 Kali 2020.3 - root 用户的密码
  5. Linux下对MySQL数据库的常见操作【创建】【删除】【导入数据库】
  6. ACMNO.26 C语言-字符统计2 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。
  7. C语言找最大的int型数!_只愿与一人十指紧扣_新浪博客
  8. 第1章统计学习方法概论之1.1统计学习
  9. 洛谷2014选课(树型dp)
  10. 在创建ArcGIS Server10.5的站点时,系统提示创建‘System/publishingToolsEX.GPServer’失败(转)...