深度学习与Tensorflow学习笔记2 ——回调函数callbacks和Tensorboard

上一期我们从Fashion-mnist数据集开始,使用Tensorflow.keras搭建一个简单的神经网络来处理分类问题。通过这个简单例子我们熟悉了tf.keras的调用。
本期我们来学习keras下面的回调函数callbacks的用法。
这里,简单的再说一句,Tensorflow有非常完善的官方文档,相当于学习手册。(而且还有中文网站:https://tensorflow.google.cn/)在学习过程中,很多问题都可以通过查看官方文档来解决。另外官方文档上还配有很多学习案例,截图如下:

image.png

有了这么完整的学习手册,大家完全可以对照着进行自学。本期我们就带着大家了解一下Tensorflow回调函数callbacks下面一个非常好用的可视化工具Tensorboard的使用。
我们可以直接在官网上找到Tensorboard的相关介绍,位于keras.callbacks下面。通过下面这张图,我们可以看到callbacks(复数)下面不止有TensorBoard,还有很多工具。常用的还有有EarlyStopping,ModelCheckpoint等

image.png

TensorBoard是TensorFlow下的一个监控网络训练的可视化工具,他可以展示Tensorflow 在运行过程中的计算图、各种指标随着时间的变化趋势以及训练中使用到的图像等信息。这样能够帮助研究者们可视化训练大规模神经网络过程中出现的复杂且不好理解的运算,展示训练过程中绘制的图像、网络结构等。下面我们就通过实战来演练一下。

前面的代码和之前一样,把相关库和数据集导入之后,创建网络。

import numpy as np
import pandas as pd
import os
import sys
import time
import sklearn
import tensorflow as tf
from tensorflow import keras

import matplotlib as mpl
import matplotlib.pyplot as plt

# 下面导入Fashion-mnist数据集
fashion_mnist = keras.datasets.fashion_mnist
(x_train_all, y_train_all), (x_test, y_test) = fashion_mnist.load_data()
x_valid, x_train = x_train_all[:5000], x_train_all[5000:]
y_valid, y_train = y_train_all[:5000], y_train_all[5000:]

# 打印数据集形状,看看是否导入成功
print(x_train_all.shape, y_train_all.shape)
print(x_valid.shape, y_valid.shape)
print(x_train.shape, y_train.shape)
>>>
(60000, 28, 28) (60000,)
(5000, 28, 28) (5000,)
(55000, 28, 28) (55000,)

下面还是和之前一样搭建一个4层的神经网络模型:

model = tf.keras.Sequential()
model.add(keras.layers.Flatten(input_shape = [28,28]))
model.add(keras.layers.Dense(400, activation = 'relu'))
model.add(keras.layers.Dense(100, activation = 'relu'))

# 输出层:
model.add(keras.layers.Dense(10, activation = 'softmax'))
model.summary()
>>>
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
flatten (Flatten)            (None, 784)               0         
_________________________________________________________________
dense (Dense)                (None, 400)               314000    
_________________________________________________________________
dense_1 (Dense)              (None, 100)               40100     
_________________________________________________________________
dense_2 (Dense)              (None, 10)                1010      
=================================================================
Total params: 355,110
Trainable params: 355,110
Non-trainable params: 0
_________________________________________________________________

callbacks是在训练过程中对网络的迭代情况进行监控,因而需要将callback的内容放在网络的训练过程中,也就是将定义好的callbacks列表作为一个参数放在model.fit中。
我们创建一个包含TensorBoard、ModelCheckpoint和Earlystopping的callbacks。对于Tensorboard需要指定一个文件夹,ModelCheckpoint需要一个文件名。

# callbacks: Tensorboard, earlystopping, ModelCheckpoint
logdir = os.path.join("callbacks" ) # Tensorboard需要一个文件夹
if not os.path.exists(logdir):
    os.mkdir(logdir)
output_model_file = os.path.join(logdir,
                                'fashion_mnist_model.h5')


callbacks = [
    keras.callbacks.TensorBoard(logdir),
    keras.callbacks.ModelCheckpoint(output_model_file,
                                   save_best_only= True),
    keras.callbacks.EarlyStopping(patience=5, min_delta= 1e-3),
]
model.compile(loss = 'sparse_categorical_crossentropy',
             optimizer = 'adam',
             metrics = ['accuracy'])

然后在训练时,将callbacks列表作为一个参数传给model.fit:

history = model.fit(x_train, y_train, epochs = 10, 
                    validation_data = (x_valid, y_valid),
                   callbacks = callbacks)
>>>
Train on 55000 samples, validate on 5000 samples
Epoch 1/10
55000/55000 [==============================] - 12s 214us/sample - loss: 2.3347 - accuracy: 0.7135 - val_loss: 0.7192 - val_accuracy: 0.7390
Epoch 2/10
55000/55000 [==============================] - 10s 181us/sample - loss: 0.6273 - accuracy: 0.7719 - val_loss: 0.5271 - val_accuracy: 0.8044
Epoch 3/10
55000/55000 [==============================] - 10s 181us/sample - loss: 0.5346 - accuracy: 0.8094 - val_loss: 0.5090 - val_accuracy: 0.8220
Epoch 4/10
55000/55000 [==============================] - 10s 185us/sample - loss: 0.4754 - accuracy: 0.8322 - val_loss: 0.4284 - val_accuracy: 0.8514
Epoch 5/10
55000/55000 [==============================] - 10s 180us/sample - loss: 0.4346 - accuracy: 0.8445 - val_loss: 0.4937 - val_accuracy: 0.8384
Epoch 6/10
55000/55000 [==============================] - 10s 179us/sample - loss: 0.4206 - accuracy: 0.8519 - val_loss: 0.4097 - val_accuracy: 0.8642
Epoch 7/10
55000/55000 [==============================] - 10s 183us/sample - loss: 0.4014 - accuracy: 0.8605 - val_loss: 0.4938 - val_accuracy: 0.8440
Epoch 8/10
55000/55000 [==============================] - 10s 184us/sample - loss: 0.3839 - accuracy: 0.8667 - val_loss: 0.4187 - val_accuracy: 0.8644
Epoch 9/10
55000/55000 [==============================] - 10s 183us/sample - loss: 0.3687 - accuracy: 0.8710 - val_loss: 0.4370 - val_accuracy: 0.8598
Epoch 10/10
55000/55000 [==============================] - 10s 182us/sample - loss: 0.3647 - accuracy: 0.8737 - val_loss: 0.3953 - val_accuracy: 0.8702

训练结束之后,我们在之前定义logdir文件夹位置是创建的callbacks的文件夹下发现多了几个文件:


image.png

下面重点来了, 怎么打开查看?不是说Tensorboard是可视化的工具?怎么个可视化?
这也是本期的重点部分,怎么打开Tensor board?
有两种方法,一种是打开windows的命令行工具,cd到callbacks的上一级目录
之后再输入tensorboard --logdir=callbacks运行tensorboard。
或者使用Anaconda自带的prompt工具打开。
这里我们以prompt为例:如下图

捕获.JPG

中间可能因为环境或者版本问题会有警告之类的,但是只要看到最后给了一个地址: localhost:6066就成功了。这里相当于tensorboard在本地构建了一个服务器,端口是6066。 我们直接在浏览器输入localhost:6066即可打开。如下图:


image.png

是不是很激动,有木有!!
在GRAPHS里面还有网络的结构,这个在复杂的网络的结构里面非常好用


image.png

这里要强调两个坑:大家在使用的时候注意避免。

  1. 命令行输入tensorboard --logdir=callbacks时,要注意:
  • callbacks不需要加上引号
  • logdir之后的“=”号两端千万不能有空格。这个和python输入代码时还是有些不一样
  1. 需要在chrome/firefox浏览器中打开,在其他浏览可能会出现打不开的情况!

好了,本期就介绍到这里,赶紧试试tensorboard这个工具吧

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容