tensorboard可视化的应用

还是在之前的数据集上进行训练,下面是预处理和训练代码,在我之前的博客中已经有对代码的解释。

import tensorflow as tf
import os
import datetime

(train_image, train_labels), (test_image, test_labels) = tf.keras.datasets.mnist.load_data()
train_image = tf.expand_dims(train_image, -1)
test_image = tf.expand_dims(test_image, -1)

#将train_image中的每个元素转换为float类型,同时进行归一化
train_image = tf.cast(train_image/255, tf.float32)
test_image = tf.cast(test_image/255, tf.float32)
train_labels = tf.cast(train_labels, tf.int64)
test_labels = tf.cast(test_labels, tf.int64)

dataset = tf.data.Dataset.from_tensor_slices((train_image, train_labels))
test_dataset = tf.data.Dataset.from_tensor_slices((test_image, test_labels))

dataset = dataset.repeat().shuffle(60000).batch(128)
test_dataset = test_dataset.repeat().batch(128)

model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(16, [3,3], activation='relu', input_shape=(None, None, 1)),  #input_shape=(None, None, 1)表示channel为1的任意大小的图片均可作为输入
    tf.keras.layers.Conv2D(32, [3,3], activation='relu'), 
    tf.keras.layers.GlobalMaxPooling2D(),
    tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
             loss='sparse_categorical_crossentropy',
              metrics=['accuracy']
             )

以上是创建model和设置model编译参数的代码,下面进入正题,开始tensorboard可视化。

我所理解的tensorboard可视化的内容,就是能够以可视化的形式查看训练时的中间参数。训练时的中间参数是写到磁盘上的,因此需要创建目录,创建目录的代码如下:

log_dir1 = os.path.join('logs', datetime.datetime.now().strftime('%Y%m%d-%H%M%S'))

下面创建回调函数,回调函数的作用就是能将训练时的中间值写入到之前的目录中。tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir1)

注意的是,目录中有默认的两个子目录,分别为train和validation,即在训练的时候会将中间参数(如loss、acc等)写入这两个目录中,以便在tesorboard可视化界面中显示。那么,我能否自己创建其他的子目录呢,因为我还需要根据自己的需求显示其他的中间变量,答案是肯定的。

我现在需要将学习率设置动态变化的,即刚开始学习率较大,随着迭代次数(epoch)的增加,学习率减小,这样的目的是使得训练结果快速收敛,以节省训练花费时间。下面代码是创建1个动态改变学习率的函数。

#改变学习速率。越接近极值点时,学习速率越小,从而保证防止越过极值点
def lr_sche(epoch):
    learning_rate = 0.030
    if(epoch > 2):
        learning_rate = 0.01#0.005
    with file_writer.as_default():
        tf.summary.scalar('learning_rate', data = learning_rate, step=epoch)
    return learning_rate
 

下面代码将该函数加入到回调中:

lr_callback = tf.keras.callbacks.LearningRateScheduler(lr_sche)

下面是进行训练的代码:

model.fit(dataset,
          epochs=25,
          steps_per_epoch=60000//128,
          validation_data=test_dataset,
          validation_steps=10000//128,
          callbacks=[tensorboard_callback, lr_callback]
)

注意的的是,上面加入了callbacks=[tensorboard_callback, lr_callback],才使得在训练中能够执行这两个回调函数。下面是训练的部分界面:

最后,如何通过tensorboard可视化进行查看呢。这样,输入以下代码

%load_ext tensorboard
%matplotlib inline
%tensorboard --logdir="./logs"

即显示出界面,在该界面中查看,部分界面如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值