tensorflow 2.0 学习 (六) Himmelblua函数求极值

Himmelblua函数在(-6,6),(-6,6)的二维平面上求极值

函数的数学表达式:f(x, y) = (x**2 + y -11)**2 + (x + y**2 -7)**2; 如下图所示

等高线如下图所示:

代码如下:

# encoding: utf-8

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.axes_grid1 import ImageGrid

# Himmelblau function
def himmelblua(x):
    return (x[0] ** 2 + x[1] - 11) ** 2 + (x[0] + x[1] ** 2 - 7) ** 2

# 产生三维数据
x = np.arange(-6, 6, 0.1)           # 创建等差数组,步长为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 = himmelblua([X, Y])
max = np.max(Z)
min = np.min(Z)

# 画三维图
fig = plt.figure(‘himmelblua‘)
ax = fig.gca(projection=‘3d‘)       # 设置3D坐标轴
ax.plot_surface(X, Y, Z)            # 3D曲面图
ax.view_init(60, -30)
ax.set_xlabel(‘x‘)
ax.set_ylabel(‘y‘)
plt.show()

# 画等高线图
N = np.arange(min, max, (max-min)/200)
fig = plt.figure(‘contour‘)
ct = plt.contour(Z, N, linewidth=2, cmap=mpl.cm.jet)        # 计算等高差
plt.clabel(ct, inline=True, fmt=‘%1.1f‘, fontsize=10)
plt.colorbar(ct)
plt.xlabel(‘x‘)
plt.ylabel(‘y‘)
plt.savefig(‘contour-himmelblua.png‘)
plt.show()

# 初始化参数
x = tf.constant([4., 0.])

# 寻找极小值数值解
for step in range(200):
    with tf.GradientTape() as tape:
        tape.watch([x])
        y = himmelblua(x)
    grads = tape.gradient(y, [x])[0]
    x -= 0.01*grads
    if step % 20 ==19:
        print(‘step {}: x={}, f(x)={}‘.format(step, x.numpy(), y.numpy()))

经过迭代后的值越来越精确,这里就不表了!

原文地址:https://www.cnblogs.com/heze/p/12115649.html

时间: 2024-10-03 09:14:55

tensorflow 2.0 学习 (六) Himmelblua函数求极值的相关文章

tensorflow 1.0 学习:用CNN进行图像分类

tensorflow升级到1.0之后,增加了一些高级模块: 如tf.layers, tf.metrics, 和tf.losses,使得代码稍微有些简化. 任务:花卉分类 版本:tensorflow 1.0 数据:http://download.tensorflow.org/example_images/flower_photos.tgz 花总共有五类,分别放在5个文件夹下. 闲话不多说,直接上代码,希望大家能看懂:) # -*- coding: utf-8 -*- from skimage im

tensorflow 2.0 学习 (七) 反向传播代码逐步实现

数据集为: 代码为: 1 # encoding: utf-8 2 3 import tensorflow as tf 4 import numpy as np 5 import seaborn as sns 6 import matplotlib.pyplot as plt 7 from sklearn.datasets import make_moons 8 # from sklearn.datasets import make_circles 9 from sklearn.model_sel

tensorflow 1.0 学习:用别人训练好的模型来进行图像分类

谷歌在大型图像数据库ImageNet上训练好了一个Inception-v3模型,这个模型我们可以直接用来进来图像分类. 下载地址:https://storage.googleapis.com/download.tensorflow.org/models/inception_dec_2015.zip 下载完解压后,得到几个文件: 其中的classify_image_graph_def.pb 文件就是训练好的Inception-v3模型. imagenet_synset_to_human_label

tensorflow 1.0 学习:模型的保存与恢复(Saver)

将训练好的模型参数保存起来,以便以后进行验证或测试,这是我们经常要做的事情.tf里面提供模型保存的是tf.train.Saver()模块. 模型保存,先要创建一个Saver对象:如 saver=tf.train.Saver() 在创建这个Saver对象的时候,有一个参数我们经常会用到,就是 max_to_keep 参数,这个是用来设置保存模型的个数,默认为5,即 max_to_keep=5,保存最近的5个模型.如果你想每训练一代(epoch)就想保存一次模型,则可以将 max_to_keep设置

tensorflow 2.0 学习 (九) tensorboard可视化功能认识

代码如下: # encoding :utf-8 import io # 文件数据流 import datetime import matplotlib.pyplot as plt import tensorflow as tf from tensorflow import keras # 导入常见网络层, sequential容器, 优化器, 损失函数 from tensorflow.keras import layers, Sequential, optimizers, losses, met

tensorflow 1.0 学习:参数初始化(initializer)

CNN中最重要的就是参数了,包括W,b. 我们训练CNN的最终目的就是得到最好的参数,使得目标函数取得最小值.参数的初始化也同样重要,因此微调受到很多人的重视,那么tf提供了哪些初始化参数的方法呢,我们能不能自己进行初始化呢? 所有的初始化方法都定义在tensorflow/python/ops/init_ops.py 1.tf.constant_initializer() 也可以简写为tf.Constant() 初始化为常数,这个非常有用,通常偏置项就是用它初始化的. 由它衍生出的两个初始化方法

tensorflow 2.0 学习 (十一)卷积神经网络 (一)MNIST数据集训练与预测 LeNet-5网络

网络结构如下: 代码如下: 1 # encoding: utf-8 2 3 import tensorflow as tf 4 from tensorflow import keras 5 from tensorflow.keras import layers, Sequential, losses, optimizers, datasets 6 import matplotlib.pyplot as plt 7 8 Epoch = 30 9 path = r'G:\2019\python\mn

遗传算法的C语言实现(一):以非线性函数求极值为例

以前搞数学建模的时候,研究过(其实也不算是研究,只是大概了解)一些人工智能算法,比如前面已经说过的粒子群算法(PSO),还有著名的遗传算法(GA),模拟退火算法(SA),蚁群算法(ACA)等.当时懂得非常浅,只会copy别人的代码(一般是MATLAB),改一改值和参数,东拼西凑就拿过来用了,根本没有搞懂的其内在的原理到底是什么.这一段时间,我又重新翻了一下当时买的那本<MATLAB智能算法30个案例分析>,重读一遍,发现这本书讲的还是非常不错的,不仅有现成算法的MATLAB实现,而且把每一种算

C++刷题——2706: 编写一个函数求最大的n 值。

2706: 编写一个函数求最大的n 值. /* Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 5 月 26 日 * 版 本 号:v1.0 */ Description 编写一个函数求满足以下条件的最大的n.:12+22+32+-+n2<k,k值由键盘输入(1000<k<=2000) Sample Input 1500 Sample Output 17 #