政安晨:示例演绎TensorFlow的官方指南(三){快速使用数据可视化工具TensorBoard}

这篇文章里咱们演绎TensorFLow的数据可视化工具:TensorBoard

在机器学习中,要改进模型的某些参数,您通常需要对其进行衡量。TensorBoard 是用于提供机器学习工作流期间所需测量和呈现的工具。它使您能够跟踪实验指标(例如损失和准确率),呈现模型计算图,将嵌入向量投影到较低维度的空间等。



准备环境

咱们基于本地环境尝试使用tensorboard(本地环境演绎,更有助于熟悉这套工具),不熟悉如何搭建tensorflow本地环境的小伙伴可以参考我的这篇文章:

政安晨的机器学习笔记——跟着演练快速理解TensorFlow(适合新手入门)icon-default.png?t=N7T8https://blog.csdn.net/snowdenkeke/article/details/135950931准备好环境之后,打开Jupyter Notebook,咱们就开始啦。

我使用了已经安装好TensorFlow的虚拟环境:

开始使用

# 加载TensorBoard笔记本扩展
%load_ext tensorboard

在笔记本(Jupyter Notebook)中执行上述语句,如果在CMD中就不要加%。

import tensorflow as tf
import datetime

咱们在本例中依然还是使用 MNIST数据集(这个数据集已经被使用了无数次啦,经常用于各种DEMO演示)。

接下来编写一个函数对数据进行标准化,同时创建一个简单的Keras模型使图像分为10类。

mnist = tf.keras.datasets.mnist(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0def create_model():return tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28), name='layers_flatten'),tf.keras.layers.Dense(512, activation='relu', name='layers_dense'),tf.keras.layers.Dropout(0.2, name='layers_dropout'),tf.keras.layers.Dense(10, activation='softmax', name='layers_dense_2')])

通过 Keras Model.fit() 使用 TensorBoard

当使用 Keras's Model.fit() 函数进行训练时, 添加 tf.keras.callback.TensorBoard 回调可确保创建和存储日志.另外,在每个时期启用 histogram_freq=1 的直方图计算功能(默认情况下处于关闭状态)

将日志放在带有时间戳的子目录中,以便轻松选择不同的训练运行。

model = create_model()
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)model.fit(x=x_train, y=y_train, epochs=5, validation_data=(x_test, y_test), callbacks=[tensorboard_callback])

执行如下:

通过命令行 (command) 或在 notebook 体验中启动 TensorBoard ,这两个接口通常是相同的。 在 notebooks, 使用 %tensorboard 命令。 在命令行中, 运行不带“%”的相同命令。

%tensorboard --logdir logs/fit

启动像这样:

在此示例中创建的可视化效果的简要概述以及可以找到它们的信息中心

(顶部导航栏中的标签页):

  • 标量显示损失和指标在每个周期如何变化。您还可以使用它们跟踪训练速度、学习率和其他标量值。可以在 Time Series 或 Scalars 信息中心找到标量。
  • 计算图可以帮助您呈现模型。在这种情况下,将显示层的 Keras 计算图,这可以帮助您确保正确构建。可以在 Graphs 信息中心找到计算图。
  • 直方图分布显示张量随时间的分布。这对于呈现权重和偏差并验证它们是否以预期的方式变化很有用。可以在 Time Series 或 Histograms 信息中心中找到直方图。可以在 Distributions 信息中心中找到分布。

当您记录其他类型的数据时,会自动启用其他 TensorBoard 信息中心。 例如,使用 Keras TensorBoard 回调还可以记录图像和嵌入向量。您可以通过点击右上角的“inactive”下拉列表来查看 TensorBoard 中还有哪些其他信息中心。

通过其他方法使用 TensorBoard

用以下方法训练时,例如 tf.GradientTape(), 会使用 tf.summary 记录所需的信息。

使用与上述相同的数据集,但将其转换为 tf.data.Dataset 以利用批处理功能:

train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
test_dataset = tf.data.Dataset.from_tensor_slices((x_test, y_test))train_dataset = train_dataset.shuffle(60000).batch(64)
test_dataset = test_dataset.batch(64)

训练代码遵循 advanced quickstart 教程,但显示了如何将 log 记录到 TensorBoard 。 首先选择损失和优化器:

loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
optimizer = tf.keras.optimizers.Adam()

创建可用于在训练期间累积值并在任何时候记录的有状态指标:

# Define our metrics
train_loss = tf.keras.metrics.Mean('train_loss', dtype=tf.float32)
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy('train_accuracy')
test_loss = tf.keras.metrics.Mean('test_loss', dtype=tf.float32)
test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy('test_accuracy')

定义训练和测试代码:

def train_step(model, optimizer, x_train, y_train):with tf.GradientTape() as tape:predictions = model(x_train, training=True)loss = loss_object(y_train, predictions)grads = tape.gradient(loss, model.trainable_variables)optimizer.apply_gradients(zip(grads, model.trainable_variables))train_loss(loss)train_accuracy(y_train, predictions)def test_step(model, x_test, y_test):predictions = model(x_test)loss = loss_object(y_test, predictions)test_loss(loss)test_accuracy(y_test, predictions)

设置摘要编写器,以将摘要写到另一个日志目录中的磁盘上:

current_time = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
train_log_dir = 'logs/gradient_tape/' + current_time + '/train'
test_log_dir = 'logs/gradient_tape/' + current_time + '/test'
train_summary_writer = tf.summary.create_file_writer(train_log_dir)
test_summary_writer = tf.summary.create_file_writer(test_log_dir)

开始训练。使用 tf.summary.scalar() 在摘要编写器范围内的训练/测试期间记录指标(损失和准确率)以将摘要写入磁盘。您可以控制记录哪些指标以及记录的频率。其他 tf.summary 函数可以记录其他类型的数据。

model = create_model() # reset our modelEPOCHS = 5for epoch in range(EPOCHS):for (x_train, y_train) in train_dataset:train_step(model, optimizer, x_train, y_train)with train_summary_writer.as_default():tf.summary.scalar('loss', train_loss.result(), step=epoch)tf.summary.scalar('accuracy', train_accuracy.result(), step=epoch)for (x_test, y_test) in test_dataset:test_step(model, x_test, y_test)with test_summary_writer.as_default():tf.summary.scalar('loss', test_loss.result(), step=epoch)tf.summary.scalar('accuracy', test_accuracy.result(), step=epoch)template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}'print (template.format(epoch+1,train_loss.result(), train_accuracy.result()*100,test_loss.result(), test_accuracy.result()*100))# Reset metrics every epochtrain_loss.reset_states()test_loss.reset_states()train_accuracy.reset_states()test_accuracy.reset_states()

再次打开 TensorBoard,这次将其指向新的日志目录。 我们也可以启动 TensorBoard 来监视训练进度。

%tensorboard --logdir logs/gradient_tape

您现在已经了解了如何通过 Keras 回调和通过 tf.summary 使用 TensorBoard 来实现更多自定义场景。

TensorBoard.dev:托管并共享您的机器学习实验结果

TensorBoard.dev 是一项免费的公共服务,可让您上传您的 TensorBoard 日志并获得可在学术论文、博文、社交媒体等中与所有人共享的永久链接。这有助于实现更好的重现性和协作。

要使用 TensorBoard.dev,请运行以下命令:

!tensorboard dev upload \--logdir logs/fit \--name "(optional) My latest experiment" \--description "(optional) Simple comparison of several hyperparameters" \--one_shot

请注意,此调用使用感叹号前缀 (!) 来调用 shell,而不是使用百分比前缀 (%) 来调用 colab 魔法。从命令行调用此命令时,不需要任何前缀。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/677036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高防服务器出租的优势及特点

高防服务器出租是指租用具备高防御能力的服务器,用于应对网络攻击、保护网站和数据安全。那么为什么会选择高防服务器出租,小编为您整理发布高防服务器出租的优势及特点。 高防服务器通常具备以下特点: 1. 高性能硬件配置:高防服务…

【八大排序】归并排序 | 计数排序 + 图文详解!!

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅C语言进阶之路 🌅 有航道的人,再渺小也不会迷途。 文章目录 一、归并排序1.1 基本思想 动图演示2.2 递归版本代码实现 算法步骤2.3 非递归版本代…

机器学习:回归决策树(Python)

一、平方误差的计算 square_error_utils.py import numpy as npclass SquareErrorUtils:"""平方误差最小化准则,选择其中最优的一个作为切分点对特征属性进行分箱处理"""staticmethoddef _set_sample_weight(sample_weight, n_samp…

Blender教程(基础)--试图的显示模式-22

一、透视模式(AltZ) 透视模式下可以实现选中透视的物体信息 发现选中了透视区的所有顶点 二、试图着色模式-显示网格边框 三、试图着色模式-显示实体 三、试图着色模式-材质预览 四、试图着色模式-显示渲染预览

Ps:直接从图层生成文件(图像资源)

通过Ps菜单:文件/导出/将图层导出到文件 Layers to Files命令,我们可以快速地将当前文档中的每个图层导出为同一类型、相同大小和选项的独立文件。 Photoshop 还提供了一个功能,可以基于文档中的图层或图层组的名称,自动生成指定大…

CleanMyMacX4.14.6如何清理mac垃圾内存

一直以来,苹果电脑的运行流畅度都很好,但是垃圾内存多了磁盘空间慢慢变少,还是会造成卡顿的。这篇文章就告诉大家电脑如何清理垃圾内存,电脑如何清理磁盘空间。 一、电脑如何清理垃圾内存 垃圾内存指的是各种缓存文件和系统垃圾…

Java图形化界面编程——事件处理 笔记

2.6 事件处理 前面介绍了如何放置各种组件,从而得到了丰富多彩的图形界面,但这些界面还不能响应用户的任何操作。比如单击前面所有窗口右上角的“X”按钮,但窗口依然不会关闭。因为在 AWT 编程中 ,所有用户的操作,都必…

JMeter使用教程

作为一名开发工程师,当我们接到需求的时候,一般就是分析需要,确定思路,编码,自测,然后就可以让测试人员去测试了。在自测这一步,作为开发人员,很多时候就是测一下业务流程是否正确&a…

Python 小白的 Leetcode Daily Challenge 刷题计划 - 20240209(除夕)

368. Largest Divisible Subset 难度:Medium 动态规划 方案还原 Yesterdays Daily Challenge can be reduced to the problem of shortest path in an unweighted graph while todays daily challenge can be reduced to the problem of longest path in an unwe…

用Python来实现2024年春晚刘谦魔术

简介 这是新春的第一篇,今天早上睡到了自然醒,打开手机刷视频就被刘谦的魔术所吸引,忍不住用编程去模拟一下这个过程。 首先,声明的一点,大年初一不学习,所以这其中涉及的数学原理约瑟夫环大家可以找找其…

【新书推荐】7.3 for语句

本节必须掌握的知识点: 示例二十四 代码分析 汇编解析 for循环嵌套语句 示例二十五 7.3.1 示例二十四 ■for语句语法形式: for(表达式1;表达式2;表达式3) { 语句块; } ●语法解析: 第一步:执行表达式1,表达式1…

LabVIEW工业监控系统

LabVIEW工业监控系统 介绍了一个基于LabVIEW软件开发的工业监控系统。系统通过虚拟测控技术和先进的数据处理能力,实现对工业过程的高效监控,提升系统的自动化和智能化水平,从而满足现代工业对高效率、高稳定性和低成本的需求。 随着工业自…

BestEdrOfTheMarket:一个针对AVEDR绕过的训练学习环境

关于BestEdrOfTheMarket BestEdrOfTheMarket是一个针对AV/EDR绕过的训练学习环境,广大研究人员和信息安全爱好者可以使用该项目研究和学习跟AV和EDR绕过相关的技术知识。 支持绕过的防御技术 1、多层API钩子; 2、SSH钩子; 3、IAT钩子&#x…

springboot176基于Spring Boot的装饰工程管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

【Make编译控制 01】程序编译与执行

目录 一、编译原理概述 二、编译过程分析 三、编译动静态库 四、执行过程分析 一、编译原理概述 make: 一个GCC工具程序,它会读 makefile 脚本来确定程序中的哪个部分需要编译和连接,然后发布必要的命令。它读出的脚本(叫做 …

react中hook封装一个table组件 与 useColumns组件

目录 1:react中hook封装一个table组件依赖CommonTable / index.tsx使用组件效果 2:useColumns组件useColumns.tsx使用 1:react中hook封装一个table组件 依赖 cnpm i react-resizable --save cnpm i ahooks cnpm i --save-dev types/react-r…

开源微服务平台框架的特点是什么?

借助什么平台的力量,可以让企业实现高效率的流程化办公?低代码技术平台是近些年来较为流行的平台产品,可以帮助很多行业进入流程化办公新时代,做好数据管理工作,从而提升企业市场竞争力。流辰信息专业研发低代码技术平…

软件文档测试

1 文档测试的范围 软件产品由可运行的程序、数据和文档组成。文档是软件的一个重要组成部分。 在软件的整人生命周期中,会用到许多文档,在各个阶段中以文档作为前阶段工作成果的体现和后阶段工作的依据。 软件文档的分类结构图如下图所示: …

图灵之旅--二叉树堆排序

目录 树型结构概念树的表示形式 二叉树概念特殊的二叉树二叉树性质二叉树的存储二叉树的遍历前中后序遍历 优先级队列(堆)概念 优先级队列的模拟实现堆的性质概念堆的存储方式堆的创建 堆常用接口介绍PriorityQueue的特性PriorityQueue常用接口介绍优先级队列的构造插入/删除/获…

力扣刷题之旅:进阶篇(六)—— 图论与最短路径问题

力扣(LeetCode)是一个在线编程平台,主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目,以及它们的解题代码。 --点击进入刷题地址 引言 在算法的广阔天地中,图论是一个非常重要的领域。…