Keras使用tensorboard显示训练过程的实例

众所周知tensorflow造势虽大却很难用,因此推荐使用Keras,它缺省是基于tensorflow的,但通过修改keras.json也可以用于theano。但是为了能用tensorflow提供的tensorboard,因此建议仍基于tensorflow。

那么问题来了,由于Keras隐藏了tensorflow那令人诟病、可笑至极的graph构建方法,那么如何使用tensorboard呢?一般网站上会告诉你是这样的:

方法一(标准调用方法):

采用keras特有的fit()进行训练,只要在fit的时候指定callbacks函数即可,代码如下

from keras.callbacks import TensorBoard
from keras.models import Sequential
……
model = Sequential()
……
tbCallBack = keras.callbacks.TensorBoard(log_dir='./Graph',
histogram_freq=1,
write_graph=True,
write_images=True)

model_history = model.fit(X_train_train,
y_train_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(X_train_val, y_train_val),
callbacks = [EarlyStopping(patience=patience,mode='min',verbose=1),
history,
tbCallBack])

虽然这种方法看上去很美,但它只适用于标准训练方法,如果你想用自己的训练方法,就需要调用train_on_batch,而不能直接使用fit(),这时就要采用下面这种方法:

方法二(特殊调用方法):

这种方法可用于调用train_on_batch的情况。

%预先写好writer,定义好model
writer = tf.summary.FileWriter(…)
model = …
%训练时
loss = model.train_on_batch(…)
summary = tf.Summary(value=[
tf.Summary.Value(tag=”d_loss”, simple_value=d_loss),
tf.Summary.Value(tag=”g_loss”, simple_value=g_loss),
])
writer.add_summary(summary) 

虽然很简单,但这种方法只能显示scalar类型,不能显示image,histgram等,非常不实用。真正实用的是下面的终结方法:

方法三(最实用的方法)

最实用的还是用tensorflow原生的调用方法,虽然相对方法二麻烦一点,但考虑到此方法与tensorflow一样,不需要去记那些额外的花拳绣腿,因此反而是最简单的,也是最有效的。

代码如下:

import tensorflow as tf
import datetime
%在训练开始之前,预先定义好可视化的东西,用的是原生的tensorflow方法,这里我们以一个GAN模型为例,让它显示整张模型图,两个标量损失函数,以及5个生成图像。方法是预先用placeholder声明所要显示的那些东西,然后在训练过程中将训练结果来填充它们。你可以自行加入histgram,都和tensorflow一样
#start tensorboard
sess=tf.Session()
logdir = “tensorboard/” + datetime.datetime.now().strftime(“%Y%m%d-%H%M%S”) + “/”
writer = tf.summary.FileWriter(logdir, sess.graph)
D_LOSS = tf.placeholder(tf.float32, [])
G_LOSS = tf.placeholder(tf.float32, [])
IMAGES = tf.placeholder(tf.float32,shape=[None,28,28,1])
tf.summary.scalar(“D_LOSS”, D_LOSS)
tf.summary.scalar(“G_LOSS”, G_LOSS)
tf.summary.image(“IMAGES”, IMAGES, 5)
merged=tf.summary.merge_all()
#end tensorboard 

训练迭代过程中,是这样的

for epoch in range(100):
% 用keras的train_on_batch方法进行训练
d_loss = d.train_on_batch(。。。。。。)
g_loss = d_on_g.train_on_batch(。。。。。。)
generated_images = g.predict(。。。。。。)
if index%10==0: #tensorboard
% 将训练结果填充可视化数据
summary=sess.run(merged,feed_dict={D_LOSS:d_loss, G_LOSS:g_loss, IMAGES:generated_images})
writer.add_summary(summary,index)

以上这篇Keras使用tensorboard显示训练过程的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Tensorflow的可视化工具Tensorboard的初步使用详解

    当使用Tensorflow训练大量深层的神经网络时,我们希望去跟踪神经网络的整个训练过程中的信息,比如迭代的过程中每一层参数是如何变化与分布的,比如每次循环参数更新后模型在测试集与训练集上的准确率是如何的,比如损失值的变化情况,等等.如果能在训练的过程中将一些信息加以记录并可视化得表现出来,是不是对我们探索模型有更深的帮助与理解呢? Tensorflow官方推出了可视化工具Tensorboard,可以帮助我们实现以上功能,它可以将模型训练过程中的各种数据汇总起来存在自定义的路径与日志文件中,然后

  • TensorBoard 计算图的查看方式

    Tensorflow计算图的展示: 1. 设置生成计算图,运行程序会自动生成"logs"日志文件 2. 在Terminal下输入指令 如果当前路径为程序日志路径(即"logs"所在路径),直接输入指令 tensorboard --logdir = logs 如果当前路径不是程序日志路径(即"logs"所在路径),可以 cd "日志的绝对路径"进入"logs"所在的路径,或者 直接输入指令 tensorboa

  • TensorBoard 计算图的可视化实现

    简介 tensorflow 配套的可视化工具, 将你的计算图画出来. 当训练一个巨大的网络的时候, 计算图既复杂又令人困惑. TensorBoard 提供了一系列的组件, 可以看到 learning rate 的变化, 看到 objective function 的变化. tfboard 读取 tf 运行时你记下的 events files, 来进行可视化. 这些 events files 包含了你记下的 summary data, 它是 protobuffer 格式, 并非文本文件. 推荐使用

  • tensorboard显示空白的解决

    ubuntu 14.04 + python3.4 + chrome, 在浏览器中查看tensorboard, 发现出了graph,其他的数据都是空白. 通过分析,发现js中如下一些错误 Uncaught SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode [duplicate] 将 /usr/local/lib/python3.4/di

  • 解决Tensorboard 不显示计算图graph的问题

    问 题:直接载入TensorBoard 总是提示No dashboard are active for current data set.根本不显示计算图. 原 因:文件路径问题,TensorBoard 未读取到文件数据,自然无法显示结果. 解决方法:设置文件路径. 程序运行完后在cmd 运行栏输入TensorBoard –logdir='graph文件所在的文件夹的路径'.为简化输入路径,可直接在该文件夹所在的文件夹中启动cmd. 以上这篇解决Tensorboard 不显示计算图graph的问

  • Keras使用tensorboard显示训练过程的实例

    众所周知tensorflow造势虽大却很难用,因此推荐使用Keras,它缺省是基于tensorflow的,但通过修改keras.json也可以用于theano.但是为了能用tensorflow提供的tensorboard,因此建议仍基于tensorflow. 那么问题来了,由于Keras隐藏了tensorflow那令人诟病.可笑至极的graph构建方法,那么如何使用tensorboard呢?一般网站上会告诉你是这样的: 方法一(标准调用方法): 采用keras特有的fit()进行训练,只要在fi

  • 浅谈keras的深度模型训练过程及结果记录方式

    记录训练过程 history=model.fit(X_train, Y_train, epochs=epochs,batch_size=batch_size,validation_split=0.1) 将训练过程记录在history中 利用时间记录模型 import time model_id = np.int64(time.strftime('%Y%m%d%H%M', time.localtime(time.time()))) model.save('./VGG16'+str(model_id

  • tensorboard实现同时显示训练曲线和测试曲线

    在做网络训练实验时,有时需要同时将训练曲线和测试曲线一起显示,便于观察网络训练效果.经过很多次踩坑后,终于解决了. 具体的方法是:设置两个writer,一个用于写训练的数据,一个用于写测试数据,并且这两个writer分别存在train和test路径中,注意测试的writer不能加sess.graph如下代码所示. ... train_log_dir = 'logs/train/' test_log_dir = 'logs/test/' # 两者路径不同 megred = tf.summary.m

  • 使用keras做SQL注入攻击的判断(实例讲解)

    本文是通过深度学习框架keras来做SQL注入特征识别, 不过虽然用了keras,但是大部分还是普通的神经网络,只是外加了一些规则化.dropout层(随着深度学习出现的层). 基本思路就是喂入一堆数据(INT型).通过神经网络计算(正向.反向).SOFTMAX多分类概率计算得出各个类的概率,注意:这里只要2个类别:0-正常的文本:1-包含SQL注入的文本 文件分割上,做成了4个python文件: util类,用来将char转换成int(NN要的都是数字类型的,其他任何类型都要转换成int/fl

  • python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码

    在使用Matplotlib画图过程中,有些内容必须鼠标点击或者划过才可以显示,这个问题可以依赖于annotate(s='str' ,xy=(x,y) ,xytext=(l1,l2) ,..)这个函数,其中s 为注释文本内容 , xy 为被注释的坐标点, xytext 为注释文字的坐标位置,其他参数可自行百度哈.当鼠标滑过时候,将其设置为可见,默认情况下为隐藏.下面是一个小例子: # -*- coding: UTF-8 -*- import matplotlib.pyplot as plt fig

  • Pytorch训练过程出现nan的解决方式

    今天使用shuffleNetV2+,使用自己的数据集,遇到了loss是nan的情况,而且top1精确率出现断崖式上升,这显示是不正常的. 在网上查了下解决方案.我的问题是出在学习率上了. 我自己做的样本数据集比较小,就三类,每类大概三百多张,初始学习率是0.5.后来设置为0.1就解决了. 按照解决方案上写的.出现nan的情况还有以下几种: 学习率太大,但是样本数据集又很小.(我的情况) 自定义的loss除以了一个很小的数字,小到接近0. 数据不干净,数据本身就有nan,可以用numpy.isna

  • keras处理欠拟合和过拟合的实例讲解

    baseline import tensorflow.keras.layers as layers baseline_model = keras.Sequential( [ layers.Dense(16, activation='relu', input_shape=(NUM_WORDS,)), layers.Dense(16, activation='relu'), layers.Dense(1, activation='sigmoid') ] ) baseline_model.compil

  • 浅谈keras中Dropout在预测过程中是否仍要起作用

    因为需要,要重写训练好的keras模型,虽然只具备预测功能,但是发现还是有很多坑要趟过.其中Dropout这个坑,我记忆犹新. 一开始,我以为预测时要保持和训练时完全一样的网络结构,也就是预测时用的网络也是有丢弃的网络节点,但是这样想就掉进了一个大坑!因为无法通过已经训练好的模型,来获取其训练时随机丢弃的网络节点是那些,这本身就根本不可能. 更重要的是:我发现每一个迭代周期丢弃的神经元也不完全一样. 假若迭代500次,网络共有1000个神经元, 在第n(1<= n <500)个迭代周期内,从1

  • js 显示日期时间的实例(时间过一秒加1)

    html: <div id="data"><font>2017年10月17日 15:11:11</font></span> js: 1:引入js库 2: function showLocale(objD) { var str, colorhead, colorfoot; var yy = objD.getYear(); if (yy < 1900) yy = yy + 1900; var MM = objD.getMonth() +

  • Android 密码 显示与隐藏功能实例

    效果: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android

随机推荐