欢迎使用 TensorWatch
TensorWatch 是一款由微软研究院设计的调试和可视化工具,适用于数据科学、深度学习和强化学习。它在 Jupyter Notebook 中运行,可显示实时的机器学习训练可视化,并执行多个关键分析任务以帮助您的模型和数据。
TensorWatch 设计灵活且可扩展,因此您还可以构建自己的自定义可视化、用户界面和仪表盘。除了传统的“所见即所记录”的方法外,它还具有独特的能力,可以对正在进行的机器学习训练过程执行任意查询,并将查询结果作为流返回,并使用您选择的可视化工具查看此流(我们称之为 懒记录模式)。
TensorWatch 目前处于高速开发阶段,目标是提供一个简便易用、可扩展且可自定义的机器学习调试平台。
如何获取
pip install tensorwatch
TensorWatch 支持 Python 3.x,并经过 PyTorch 0.4-1.x 测试。大多数功能也应适用于 TensorFlow eager tensors。TensorWatch 使用 graphviz 创建网络图,根据您的平台,有时需要手动安装。
如何使用
快速开始
以下是一个简单的代码示例,每秒记录一个整数及其平方作为元组到 TensorWatch:
import tensorwatch as tw
import time
# 流将存储在 test.log 文件中
w = tw.Watcher(filename='test.log')
# 创建一个用于记录的流
s = w.create_stream(name='metric1')
# 生成 Jupyter Notebook 以查看实时流
w.make_notebook()
for i in range 1000):
# 写入我们要记录的 x,y 对
s.write((i, i*i))
time.sleep(1)
当您运行此代码时,您会注意到在脚本文件夹中创建了一个 Jupyter Notebook 文件 test.ipynb
。在命令提示符中输入 jupyter notebook
并选择 test.ipynb
。选择菜单中的 Cell > Run all 以查看在脚本中写入值时的实时折线图。
这是您在 Jupyter Notebook 中将看到的输出:
要深入了解各种其他功能,请参阅 教程 和 notebooks。
这是如何工作的?
当您向 TensorWatch 流写入时,值会被序列化并发送到 TCP/IP 套接字以及您指定的文件中。从 Jupyter Notebook,我们从文件中加载先前记录的值,然后监听该 TCP/IP 套接字以获取未来的值。可视化工具监听流并在值到达时呈现。
好吧,这是一个非常简化的描述。TensorWatch架构实际上更强大。TensorWatch 中的几乎所有内容都是 流。文件、套接字、控制台,甚至可视化工具本身也是流。TensorWatch 流的一个很酷的事情是它们可以监听任何其他流。这允许 TensorWatch 创建一个 数据流图。这意味着可视化工具可以同时监听多个流,每个流可以是文件、套接字或其他流。您可以递归地扩展这一点以构建任意数据流图。TensorWatch 将流从存储方式与可视化方式中解耦。
可视化
在上述示例中,折线图用作默认可视化。然而,TensorWatch 支持许多其他图表类型,包括直方图、饼图、散点图、条形图以及其中许多图的 3D 版本。您可以记录数据,指定所需的图表类型,TensorWatch 会处理其余部分的工作。
TensorWatch 的一个重要优势是能够轻松地结合、组合和创建自定义可视化。例如,您可以选择在同一个图中可视化任意数量的流。或者您可以同时在许多不同的图中可视化同一流。或者您可以将任意一组可视化并排放置。您甚至可以通过创建一个新的 Python 类、实现几个方法来创建自己的自定义可视化小部件。
比较多次运行的结果
每个 TensorWatch 流可以包含您选择的度量。默认情况下,TensorWatch 将所有流保存在单个文件中,但您也可以选择将每个流保存在单独的文件中或根本不保存它们(例如,通过套接字发送流或直接进入控制台,对磁盘零影响!)。稍后,您可以打开这些流并将它们定向到一个或多个可视化工具。该设计允许您轻松快速地通过您选择的可视化工具比较不同实验的结果。
在 Jupyter Notebook 中训练
通常,您可能更喜欢在 Jupyter Notebook 中完成数据分析、机器学习训练和测试,而不是在单独的脚本中。TensorWatch 可以帮助您从头到尾轻松完成在 Jupyter Notebook 中运行的代码的实时复杂可视化。
懒记录模式
TensorWatch 的一个独特功能是能够查询实时运行的过程,检索查询结果作为流,并将该流定向到您喜欢的可视化工具。您不需要预先记录任何数据。我们称这种新的调试和可视化方式为 懒记录模式。
例如,如下所示,我们可视化输入和输出图像对,在训练自动编码器针对水果数据集时随机采样。这些图像在脚本中没有预先记录下来。相反,用户以 Python lambda 表达式形式发送查询,结果是一个图像流,该流在 Jupyter Notebook 中显示:
参见 懒记录教程。
训练前和训练后任务
TensorWatch 利用几个出色的库,包括 hiddenlayer、torchstat、Visual Attribution,以便在一个一致的包和界面中执行常规的调试和分析活动。
例如,您可以使用一行代码查看具有张量形状的模型图:
您可以查看不同层的统计数据,如 flops、参数数量等:
可以使用 t-SNE 等技术以较低维度空间查看数据集:
预测解释
我们希望提供各种工具来解释预测,从而帮助调试模型。目前,我们为卷积网络提供了几种解释器,包括 Lime。例如,以下内容突出显示了导致 Resnet50 模型对 ImageNet 数据集的类 240 进行预测的区域:
教程
论文
有关更多技术细节,请参阅 TensorWatch 论文(EICS 2019 会议)。请引用如下内容:
@inproceedings{tensorwatch2019eics,
author = {Shital Shah and Roland Fernandez and Steven M. Drucker},
title = {A system for real-time interactive analysis of deep learning training},
booktitle = {Proceedings of the {ACM} {SIGCHI} Symposium on Engineering Interactive
Computing Systems, {EICS} 2019, Valencia, Spain, June 18-21, 2019},
pages = {16:1--16:6},
year = {2019},
crossref = {DBLP:conf/eics/2019},
url = {https://arxiv.org/abs/2001.01215},
doi = {10.1145/3319499.3328231},
timestamp = {Fri, 31 May 2019 08:40:31 +0200},
biburl = {https://dblp.org/rec/bib/conf/eics/ShahFD19},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
贡献
我们非常欢迎您的贡献、反馈、问题和功能请求!请提交一个 Github 问题 或向我们发送一个 pull request。请查看 Microsoft 行为准则 并了解更多。
联系
加入 TensorWatch 在 Facebook 的群组以了解最新消息或提出任何问题。
致谢
TensorWatch 利用了几个开源库的许多功能。这些包括:hiddenlayer、torchstat、Visual-Attribution、pyzmq、receptivefield、nbformat。请参见 setup.py 中的 install_requires
部分以获取最新列表。
许可证
该项目根据 MIT 许可证发布。有关更多详情,请查看 许可证文件。