概述
前言:
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可视化总结与数据增强所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复