TF-Coder,一个为您编写棘手的TensorFlow表达式的工具

2020-08-27 05:18:45

与直接编写张量操作代码不同,如果您只需通过一个说明性示例进行演示并自动获得相应的代码,会怎么样?TensorFlow Coder(TF-Coder)使这成为可能!TF-Coder是一个程序合成工具,可以帮助您编写TensorFlow代码。首先,该工具要求提供所需张量变换的输入-输出示例。然后,它运行组合搜索以查找执行该转换的TensorFlow表达式。TF-Coder的输出是可以包含在项目中的实际TensorFlow代码。下面一分钟的视频介绍了TF-Coder,此Colab笔记本允许您使用TF-Coder工具解决您自己的张量操作问题。在这篇博客文章中,我们将说明TF-Coder可以帮助您编写TensorFlow代码的各种场景。假设您想要以广播的方式将一个M元向量与一个N元向量相加,以产生一个包含所有成对和的M×N矩阵。您可以提供一个输入-输出示例(使用M=3和N=4),而不是深入研究TensorFlow文档来找出如何做到这一点:输入张量,作为将输入变量名称映射到示例张量值的DCT:所需的输出张量,与提供的输入张量相对应:给定此信息(默认情况下已经输入到TF-Coder Colab中),TF-Coder工具将在不到几秒的时间内自动找到适当的TensorFlow代码:上面的问题非常简单。TF-Coder对于较难的问题也很有用,我们将在下面看到。让我们假设您正在使用一个数字特征,比如商品的价格。您数据集中的价格范围很广,例如,从10美元以下到1000美元以上。如果将这些价格直接用作功能,则您的模型可能会过度适应培训数据中的特定价格,并且在评估过程中也可能难以应对异常价格。要处理这些问题,您可能需要使用分组法将数字价格转换为分类特征。例如,使用桶边界[10,50,100,1000]意味着10美元以下的价格应该属于桶0,10美元到50美元之间的价格属于桶1,依此类推。选择桶边界后,如何使用TensorFlow将数字价格实际映射到桶索引?例如,给定以下桶边界和项目价格:#输入张量边界=[10,50,100,1000]价格=[15,3,50,90,100,1001]。

您需要计算每个项目的存储桶号:虽然TensorFlow附带了各种分组操作,但可能很难找出哪个特定操作执行这种精确的分组。由于TF-Coder可以根据行为识别数百个张量运算,因此您可以通过提供输入输出示例来查找正确的操作:#input-output exampleinput={';aries';:[10,50,100,1000],';Price';:[15,3,50,90,100,1001],}output=[1,0,2,2,3,4]。

在几秒钟内,TF-Coder输出以下解决方案:这给了我们一个有用的提示,tf.searchsorted的文档确认此代码确实执行了所需的分组。现在让我们考虑另一个问题:计算一个0-1张量,它标识输入张量每行的最大元素。#输入张量值=[[0.7,0.2,0.1],[0.4,0.5,0.1],[0.4,0.4,0.2],[0.3,0.4,0.3],[0.0,0.0,1.0]]#输出张量TOP_SCORTS=[[1,0,0],[0,1,0],[1,0,0],[0,1,0],[0,0,1]]。

请注意,如果相同的最大元素在一行内多次出现(例如在第三行分数中),则应该只标记第一个这样的最大元素,以便top_score的每一行都恰好有一个条目1。与最后一个问题不同,没有单个TensorFlow函数来执行此计算。如果您在文档中搜索“max”,您可能会发现tf.duce_max、tf.argmax和tf.max是相关的,但是您应该使用哪一个呢?Tf.duce_max产生[0.7,0.5,0.4,0.4,1.0],tf.argmax产生[0,1,0,1,2],tf.max不正确,因为它有两个参数。所有这些看起来都不接近我们想要的输出。TF-Coder可以帮助解决这样棘手的问题。您可以将问题写成输入-输出示例的形式:#输入-输出示例输入={';分数';:[[0.7,0.2,0.1],[0.4,0.5,0.1],[0.4,0.4,0.2],[0.3,0.4,0.3],[0.0,0.0,1.0]],}output=[[1,0,0],[0,1,0],[1,0,0],[0,0,1]]。

TF-Coder使用tf.one_hot和tf.argmax的组合来解决这个问题:通过对TensorFlow操作组合的详细搜索,TF-Coder经常会找到这样的优秀解决方案,这可能会简化和加快您的TensorFlow程序。考虑通过将每行除以该行的总和,将整数计数列表规范化为概率分布。例如: