Himmelblau函数优化实战
方法一写法:
#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函数优化实战相关推荐
- 深度学习(31)随机梯度下降九: Himmelblau函数优化实战
深度学习(31)随机梯度下降九: Himmelblau函数优化实战 1. Himmelblau函数 2. 函数优化实战 1. Himmelblau函数 Himmelblau函数是用来测试后话算法的常用 ...
- R语言optim函数进行函数优化实战(和lm函数进行对比)
R语言optim函数进行函数优化实战(和lm函数进行对比) 目录 R语言optim函数进行函数优化实战(和lm函数进行对比) #仿真数据
- Django中prefetch_related()函数优化实战指南
对于多对多字段(ManyToManyField)和一对多字段, 可以使用prefetch_related()来进行优化 prefetch_related()和select_related()的设计目的 ...
- R语言optimize函数一维优化实战
R语言optimize函数一维优化实战 目录 R语言optimize函数一维优化实战 #基础语法 #优化用户自定义的函数
- 深度学习与神经网络(三)——多层感知机 反向传播 优化实战
介绍一个完完整整的,与我们实际使用一摸一样的多层感知机的反向传播方式 多层感知机MLP & 反向传播 与多输出感知机相比 有多层节点(绿色的) δkk是由Okk和tk得到的 所以δ一共有k个 ...
- 收藏起来,史上最全的 MySQL 高性能优化实战总结!
一.前言 MySQL 对于很多 Linux 从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行 MySQL 的优化之前必须要了解的就是 MySQL 的查询 ...
- Android主线程耗时动画卡顿,Android性能优化实战之界面卡顿
原标题:Android性能优化实战之界面卡顿 作者:红橙Darren https://www.jianshu.com/p/18bb507d6e62 今天是个奇怪的日子,有三位同学找我,都是关于界面卡顿 ...
- 史上最全的MySQL高性能优化实战总结!
https://www.jianshu.com/p/4af41b682e06 1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思 ...
- 22_2D函数优化实例
1.19. 2D函数优化实例 为了演示优化神经网络参数得到loss极小值的过程,和不同初始值可能产生不同的极值点,在此引入了如下图所示函数: 从图中可以看出该函数2D图像呈碗状,有四个极小值点,它的极 ...
最新文章
- Python学习札记(六)
- python代码需要背吗-python程序需要编译吗
- android之音乐播放和音效播放
- 第八届蓝桥杯-日期问题
- 用Unix的设计思想来应对多变的需求
- 关于解决织梦文档栏目删除后ID 从1开始的方法
- 担心再次被起诉?马斯克已删除特斯拉可能几个月内成为最大公司推文
- mysql 视图没主键,mysql创建视图后打开提示没有主键,mysql视图
- 初始runtime(运行时机制)
- HTTP和RPC的区别
- MP3参数,格式,术语有关一切内容详解
- python读取批量txt文件
- 初识EMC元器件(五)——电容参数解读及选型应用
- 新随笔--读书笔记《学会提问》:学习提出好问题的思维方法
- java基于ssm+vue网上考试报名系统 element
- WampServer安装教程、相关问题和检验
- java启动脚本指定jdk_使用指定的JDK启动IDEA的三种方法
- win10 进入system账户权限
- 实现表格行的拖拽以及分页
- ABB REF601 CE446BB1NH 馈线保护控制继电器
热门文章
- MySQL数据库聚合函数(count、max、min、sum、avg)
- Selenium提取数据之标签对象提取文本内容和属性值
- python中读取文件过程中seek()函数的使用
- 几句代码 修改 Kali 2020.3 - root 用户的密码
- Linux下对MySQL数据库的常见操作【创建】【删除】【导入数据库】
- ACMNO.26 C语言-字符统计2 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。
- C语言找最大的int型数!_只愿与一人十指紧扣_新浪博客
- 第1章统计学习方法概论之1.1统计学习
- 洛谷2014选课(树型dp)
- 在创建ArcGIS Server10.5的站点时,系统提示创建‘System/publishingToolsEX.GPServer’失败(转)...