如何调试TensorFlow
本Python教程是我们的Python包系列相关教程.
尝试一种更快更简单的方法来管理Python包和解决依赖关系。使用ActiveState的Python 3.9并使用所需的包和依赖项构建自己的运行时。Acti188bet金宝搏备用veState平台的命令行界面,State Tool将自动为您解析依赖项,以确保您的Python环境不会因安装不兼容的依赖项而被破坏。
免费开始在ActiveState平台上创建帐户188bet金宝搏备用或者用你的GitHub账号登录。
如何调试TensorFlow
TensorFlow是一个用于复杂数值计算的开源Python库。它也是一种用于表示神经网络的计算图的语言,可能需要对不总是按照预期运行的代码进行调试和错误修正。
TensorFlow基于图的功能与它所使用的许多深度学习算法的随机性相结合,使得调试TensorFlow具有挑战性。某些传统的调试语言方法不适用于TensorFlow。
例如,插入打印语句有助于调试命令语言,但由于TensorFlow的图形结构,它很可能会忽略打印语句。
不同类型的bug
TensorFlow中的调试可以参考代码中的bug,以及没有收敛或没有产生目标值的模型。
这篇文章提供了建议和最佳实践来避免这两种问题通过使用:
- 尽可能减少调试需要的方法
- TensorFlow库中包含的函数和调试工具
TensorFlow调试方法
调试TensorFlow有四种主要方法:
- 在Session.run中打印值
- 使用tf。打印操作
- 增加日志
- 使用TensorFlow调试器和API函数
通过在Session.run中打印值调试TensorFlow
在会话环境中创建TensorFlow对象,并在打印语句中运行它们。这是一种简单、安全的求张量值的方法。
Session对象封装了在其中执行和计算其他对象的环境。封装会话可以避免会话中可能的错误影响会话外的功能。这样可以简化调试。例如:
tensorflow 2中的Eager执行是自动的。x #和需要被禁用实例:tf.compat.v1.disable_eager_execution() #创建一个图:a = tf.constant (4.0) b = tf.constant (5.0) c = a * b #启动一个会话的图:税= tf.compat.v1.Session() #评估张量' c '在这个会话:打印(sess.run (c))
图1所示。打印session.run()值。
使用tf调试TensorFlow。打印操作
Python的替代品打印与tf.print在图形执行过程中打印张量值。
tf.print ()是一个TensorFlow操作符,用于在调试时将指定的输入打印到指定的输出流,其中包括潜在的错误。Tf.print()可以帮助在执行期间跟踪值。例如:
Import tensorflow as tf Import sys张量= tf.range(8)#打印“[0 1 2 ... 7]”到sys.stderr:tf.print(tensor, output_stream=sys.stderr)
通过增加日志量来调试TensorFlow
日志文件可以是潜在调试信息的来源。首先导入所需的库:导入日志
通常,大多数TensorFlow日志记录工具支持不同级别的严重性(级别)。TensorFlow支持以下五个标准的严重级别,按严重程度排序:调试、错误,致命,信息,*警告
为了更好地利用日志,可以在python控制台中输入以下代码来增加TensorFlow日志的详细程度:
TF_CPP_VMODULE=segment=2 convert_graph=2 convert_nodes=2 trt_engine_op=2
要返回TensorFlow记录器实例,请输入:
tf.get_logger ()
使用张量调试器和API函数调试张量流
TensorFlow调试器转储如下调试信息:
- 张量流函数结构,如:
- 用@tf.function修饰的Python函数的编译
- op类型
- 名(如果可用)
- 上下文
- 输入和输出张量,以及相关的堆栈跟踪
- 执行TensorFlow操作(ops)和函数及其堆栈跟踪、操作类型、名称(如果可用)和上下文。这取决于tensor_debug_mode论点,输出张量的值或更简洁的张量值摘要将被丢弃。
- TensorFlow程序执行过程中涉及的Python源文件的快照。
你可以实现TensorFlow调试,并通过在TensorFlow应用程序的顶部添加一行代码将信息发送到指定的位置:
tf.debugging.experishing.enable_dump_debug_info('/ tmp / my-tfdbg-dump-dump-dumbs')# TensorFlow应用代码:导入tensorflow作为tf ....
图2:TensorFlow调试:
TensorFlow调试可以通过以下命令关闭:
disable_dump_debug_info ()
启用TensorFlow数值检查
当tf.debugging.enable_check_numerics当一个张量包含∞或南遇到。此方法仅在调用它的线程上有效。
例如:
导入tensorflow作为tf导入numpy作为np#启用数字检查:tf.debugging.enable_check_numerics () x = np.array ([[0.0, -1.0], [7.0, 8.0]])输入数组中的负元素将生成NaN错误。因为启用了数字检查#,程序将抛出一个错误并打印一个错误消息:y = tf.math.sqrt (x)
图3。数字检查输出:
数字检查机制可以禁用:
tf.debugging.disable_check_numerics ()
用以下方法修饰Python函数@tf.function为错误检测
tf.function是一个装饰器函数,它将Python代码转换为一个可调用的Tensorflow图形函数。在这个例子中tf.functionDecorator将' add '转换为一个可调用函数:
@tf.functiondef add(a, b): return a + b add(tf.ones([2, 2]), tf.ones([2, 2]))
图4。' add '被tf作为函数调用。函数并返回a + b:
利用TensorFlow tf.debugging API函数
根据每个函数的规格,使用API检查bug、错误和True/False条件。
例如,要检查张量的nan值和无穷大值,您可以使用tf.debugging.check_numerics功能。运行时,函数返回一个InvalidArgument如果张量有任何nan和无穷大值,则存在误差:
tf.debug .check_numerics(张量,message, name=无)
有关tf.debugging API函数的完整列表,请参阅API文档.
Python包管理的现代解决方案——尝试ActiveState的平台
Acti188bet金宝搏备用veState Platform是一个基于云的Python构建工具。它提供了构建自动化和漏洞修复:
- Python语言核心,包括Python 2.7和Python 3.5+
- Python包及其依赖项,包括:
- (即传递依赖关系。,依赖的依赖)
- 链接的C和Fortran库,因此您可以构建数据科学包
- Windows、Linux和macOS的操作系统级依赖
- 依赖关系(即共享。OpenSSL)
- 在几分钟内找到、修复和自动重建安全版本的Python包,如Django和环境
运行中的Python包管理
了解ActiveState平台如何帮助您管理Python环境的依赖项。188bet金宝搏备用只需运行以下命令来安装Python 3.9和我们的包管理器State Tool:
窗户
powershell -Command "& $([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://platform.activestate.com/dl/cli/install.ps1')) -activate-default ActiveState-Labs/Python-3.9Beta"
Linux
——activate-default ActiveState-Labs/Python-3.9Beta .sh <(curl -q https://platform.activestate.com/dl/cli/install.sh)——activate-default ActiveState-Labs/Python-3.9Beta
现在可以运行状态install
让我们知道你的经验ActiveState的社区论坛。
下面的教程将逐步指导你如何使用其他流行的机器学习Python包: