Tensorflow学习笔记----Himmelblau函数优化、TensorBoard可视化、Keras高层接口

一.Himmelblau函数优化(FunctionOptimization)

此函数为:在这里插入图片描述
图像如下所示:
在这里插入图片描述

图上四个蓝点的最小值都是0(z轴,即函数值),分别为f(3.0,2.0)=0.0、f(-2.805,3.131)=0.0、f(-3.779,-3.283)=0.0、f(3.584,-1.848)=0.0;分别位于x-y平面的第一、二、三、四象限;

我们先来自己画出这个函数图像:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

def himmelblau(x):  #定义himmelblau函数
    return (x[0] ** 2 + x[1] - 11) ** 2 + (x[0] + x[1] ** 2 - 7) ** 2

x = np.arange(-6,6,0.1) #设置x范围
y = np.arange(-6,6,0.1) #设置y范围
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 = tf.constant([-4., 0.])   #随机初始点

for step in range(100): #迭代一百次

    with tf.GradientTape() as tape:
        tape.watch([x])
        y = himmelblau(x)

    grads = tape.gradient(y, [x])[0]    #求到梯度
    x -= 0.01 * grads   #使用梯度更新x

    if step % 20 == 0:
        print('step {}: x = {}, f(x) = {}'
              .format(step, x.numpy(), y.numpy()))  #打印x的状态

最终输出为:
step 0: x = [-2.98 -0.09999999], f(x) = 146.0
step 20: x = [-3.6890159 -3.1276689], f(x) = 6.054703235626221
step 40: x = [-3.7793102 -3.283186 ], f(x) = 0.0
step 60: x = [-3.7793102 -3.283186 ], f(x) = 0.0
step 80: x = [-3.7793102 -3.283186 ], f(x) = 0.0
可见在第40次迭代寻找时就已经找到最低点。

二.TensorBoard可视化(TensorBoardVisualization)

安装:一般情况下现在的Tensorflow里是自动安装了Tensorboard的,可以直接使用,如果没有的话,就直接在命令行中输入activate tensorflow进入tensorflow环境,再输入pip install tensorboard即可;

打开:运用一个生成可视化的py文件,在文件同目录下生成了一个log文件后,在这个目录进入命令行,输入tensorboard --logdir=logs,命令行会生成一个地址,直接进入就是tensorboard的界面啦。

监听:curves曲线Loss/acc;可以向里面喂入各种参数来进行监听;

with summary_writer.as_default:
    tf.summary.scalar('loss',float(loss),step=epoch)#向里面喂入loss参数从而监听
    tf.summary.scalar('accuracy', float(train_accuracy), step=epoch)

图片可视化:向tensorboard喂入图片进行监听,不仅可以监听单张,而且在图片很多时可以同时喂入多张图片;

simple_img = next(iter(db))[0]
simple_img = simple_img[0]
simple_img = tf.reshape(simple_img,[1,28,28,1])
with summary_writer.as_default:
    tf.summary.scalar('Training simple',simple_img,step=0)    #向里面喂入图片从而监听

具体的整体实例以及输出见:Tensorflow学习笔记----TensorBoard数据可视化安装与使用

三.Keras高层接口(KerasInterface)

这里的Keras就是Tensorflow提供的包tf.keras,这个包提供的功能有:
datasets(数据集),layers,losses(损失函数),metrics(监听计算数据考查性能),optimizers(优化器)

datasets的数据集加载在前面很多地方都写过,就不多做介绍:
(x, y), (x_val, y_val) = datasets.mnist.load_data()

这里主要介绍metrics
1.首先看如新建meter:
acc_meter = metrics.Accuracy(); loss_meter = metrics.Mean();
2.更新数据
loss_meter.update_state(loss); acc_mater.update_state(y,pred);
3.取出数据
Print(step,’loss = ’,loss_meter.result().numpy);
Print(step,’Evaluate Acc = ’,total_correct/total,acc_meter.result().numpy());
4.清楚缓存
loss_meter.reset_state();

接下来看一下快捷训练方法:Compile&Fit;其中Compile主要是一个装载的功能,指定了优化器以及评估指标的选择;接着通过Fit完成标准处理流程;然后通过Evaluate完成测试;最后拿到训练好的模型,通过Predict进行新样本的预测。

networks.compile(optimizers = optimizers.Adam(lr=0.01),#定义优化器
                 loss = tf.losses.CategoricalCrossentropy(from_logits=True), #指定Loss
                 metrics = ['accuracy'] #指定测试指标
                 )
network.fit(db,epoch=10)    #指定迭代次数
network.fit(db,epoch=10,validation_data=ds_val,validation_freq=2)    #指定测试
netword.evaluate(tt_val)    #进行验证
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值