我是靠谱客的博主 平淡电源,最近开发中收集的这篇文章主要介绍TF2.0中Tensorboard可视化总结与数据增强,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言: 

TensorBoard是一款为了更方便Tensorflow程序的理解、调试与优化发布的可视化工具。你可以用TensorBoard来展现你的TensorFlow图像,绘制图像生成的定量指标图以及附加的数据。它是通过读取TensorFlow的事件文件来运行。TensorFlow的事件文件包括你会在TensorFlow运行中涉及到的主要数据(学习速率、Loss的变化等等...)。

Tensorboard可视化

  • tf.keras.callbacks.TensorBoard参数:

    log_dir='logs',----保存被tensorboard解析的log文件路径
    histogram_freq=0, ----对于模型中各个层计算激活值和模型权重直方图的频率(训练轮数中)。 如果设置成 0 ,直方图不会被计算。对于直方图可视化 的验证数据(或分离数据)一定要明确的指出。
    write_graph=True,----是否在 TensorBoard 中可视化图像。 如果 write_graph 被设置为 True,日志文件会变得非常大。
    write_images=False,----是否在 TensorBoard 中将模型权重以图片可视化
    update_freq='epoch',-----是否在 TensorBoard 中将模型权重以图片可视化
    profile_batch=2,----分析批次以抽样计算特征。PrruleX批处理必须是非负整数或逗号分隔字符串。一对正整数。一对正整数表示要分析的批次范围。默认情况下,它将分析第二个批处理。将profile_batch=0设置为禁用分析。必须在TensorFlow中运行eager模式。

    embeddings_freq=0,----被选中的嵌入层会被保存的频率(在训练轮中)。
    embeddings_metadata=None,----  一个字典,对应层的名字到保存有这个嵌入层元数据文件的名字。 查看 详情 关于元数据的数据格式。 以防同样的元数据被用于所用的嵌入层,字符串可以被传入。

  • 配置:

  • (1) 通过tf.keras回调函数使用tensorboard:

import datetime
import tensorflow as tf
import os

#第一步
nowtime_str = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
log_dir = "D:/output/logs/" + nowtime_str
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir,histogram_freq = 1)

#第二步
model.fit(*,
         callbacks = [tensorboard_callback])
  • (2) 自定义变量的回调tensorboard可视化:

"""
第一步:
改变学习率的回调函数-并将我们学习率变换的逻辑告诉它-将它放入到fit的callbacks中
"""
lr_callbacks = tf.keras.callbacks.LearningRateScheduler(lr_changes)

"""
第二步:
创建tf中的文件编写器
参数:路径
"""
file_writer = tf.summary.create_file_writer(log_dir+"/lr")

"""
第三步:
file_writer设置为当前的默认编写器,就就是数据有变换会通过这个编写器,写入到对应位置的文件中
"""
file_writer.set_as_default()

def lr_changes(epoch):
    learn_rate = 0.2
    if epoch > 1:
        learn_rate = 0.15
    if epoch > 2:
        learn_rate = 0.12
    if epoch > 4:
        learn_rate = 0.1
    """
    第四步:
    将我们的学习率变化情况写入到scalar,以便对应tensorboard中的scalar模块显示出来
    tf.summary.scalar--->收集标量值
    """
    tf.summary.scalar("learning_rate",data=learn_rate,step=epoch)
    return learn_rate





  • (3) 在自定义训练的循环中使用tensorboard:

import datetime
nowtime_str = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
nowtime_str

"""
第一步:创建2个目录,用来保存记录的变量
        创建2个文件编写器
"""
train_log_dir = "D:/output/gradients/" + nowtime_str + "/train"
test_log_dir = "D:/output/gradients/" + nowtime_str + "/test"

train_writer = tf.summary.create_file_writer(train_log_dir)
test_writer = tf.summary.create_file_writer(test_log_dir)

#在自定义的train()函数中:
"""
"""
第二步:将train损失/变化率的更改记录下来(注意:使用train的上下文管理器)
"""
with train_writer.as_default():
    tf.summary.scalar("loss",trains_loss.result(),step = step)
    tf.summary.scalar("acc",trains_acc.result(),step = step)

             
"""
第二步:将train损失/变化率的更改记录下来(注意:使用train的上下文管理器)
"""
with test_writer.as_default():
    tf.summary.scalar("loss",tests_loss.result(),step = step)
    tf.summary.scalar("acc",tests_acc.result(),step = step)
  • 显示:

  • (1) 在notebook中显示Tensorboard:

%load_ext tensorboard
%matplotlib inline
%tensorboard --logdir logs
  • (2) 在网页中显示Tensorboard:

 第一步:

在doc下输入tensorboard -- logdir logs

主要后面这个路径是程序中保存的事件文件的目录,实在不放心可以使用绝对目录。

第二步:

复制下面的网址,在浏览器中打开(最好使用谷歌浏览器) 

数据增强:

数据增强不仅可以扩充数据集,同时还能提高模型的泛化能力;在Tensorflow2.0中,数据增强的方法主要被封装在tf.image中,

  • 原图像:

image = tf.io.read_file("F:/MachineLearnDatas/images/images/american_pit_bull_terrier_12.jpg")
image = tf.image.decode_jpeg(image)
plt.figure(figsize = (image.shape[0]/72.0,image.shape[1]/72.0))
plt.axis("off")
plt.imshow(image)

  • 随机裁剪给定大小

随机在原始图片上裁剪一块[150,150]大小(像素点)的图片,注意:要保证裁剪后的图片大小应比原图片小,设置图片大小不能缺省通道数。

img = tf.image.random_crop(image,(150,150,3))
plt.figure(figsize = (img.shape[0]/72.0,img.shape[1]/72.0))
plt.axis("off")
plt.imshow(img)

  • 随机调整图像对比度
"""
参数:
image:被调整的原图
0.8:float类型,最低对比度,[0,1]
0.1:float类型最高对比度,[0,1]
seed:随机数种子
"""
img = tf.image.random_contrast(image,0.8,1,seed = time.time())
plt.figure(figsize = (img.shape[0]/72.0,img.shape[1]/72.0))
plt.axis("off")
plt.imshow(img)

  • 随机调整图像亮度
"""
参数:
image:被调整的图像
max_delta= 0.8 :随机从[-max_delta, max_delta)范围内抽取亮度,负值表示图像变暗的程度
time.time():同理,随机数种子
"""
img = tf.image.random_brightness(image,0.8,time.time())
plt.figure(figsize = (img.shape[0]/72.0,img.shape[1]/72.0))
plt.axis("off")
plt.imshow(img)

  • 随机左右翻转图片:
"""
参数:
image:被调整的图像
time.time():同理,随机数种子
"""
img = tf.image.random_flip_left_right(image,time.time())
plt.figure(figsize = (img.shape[0]/72.0,img.shape[1]/72.0))
plt.axis("off")
plt.imshow(img)

  • 随机上下翻转图片: 
"""
参数:
image:被调整的图像
time.time():同理,随机数种子
"""
img = tf.image.random_flip_up_down(image,time.time())
plt.figure(figsize = (img.shape[0]/72.0,img.shape[1]/72.0))
plt.axis("off")
plt.imshow(img)

  • 随机调整RGB图像的色调
"""
Adjust the hue of RGB images by a random factor.
`max_delta` must be in the interval `[0, 0.5]`.
参数:
image:被调整的图像
max_delta:float类型,值位于[0, 0.5]
time.time():同理,随机数种子
"""
img = tf.image.random_hue(image,max_delta = 0.3,seed=time.time())
plt.figure(figsize = (img.shape[0]/72.0,img.shape[1]/72.0))
plt.axis("off")
plt.imshow(img)

  • 随机调整RGB图像的饱和度
"""
参数:
image:被调整的图像
lower:随机饱和因子的下界
upper:随机饱和因子的上界
time.time():同理,随机数种子
"""
img = tf.image.random_saturation(image,lower = 10,upper = 20,seed=time.time())
plt.figure(figsize = (img.shape[0]/72.0,img.shape[1]/72.0))
plt.axis("off")
plt.imshow(img)

最后

以上就是平淡电源为你收集整理的TF2.0中Tensorboard可视化总结与数据增强的全部内容,希望文章能够帮你解决TF2.0中Tensorboard可视化总结与数据增强所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部