当前位置: 首页 > 科技观察

知道还不迟,输入例子自动生成代码,谷歌开源这个神器走红

时间:2023-03-21 15:20:03 科技观察

操作张量并不容易,因为它需要很多先决条件,比如跟踪多维度、Dtype兼容性、数学正确性和张量形状等。当然,最大的挑战是从数百个可用选项中确定正确的TensorFlow操作。如果你不需要编写张量操作代码,你只需要通过一个说明性的例子来演示它,并且有一个工具可以生成相应的代码。你会选择这个工具吗?如果是这样,Google的TensorFlowCoder(TF-Coder)可以帮助您实现这一目标。TF-Coder是一个程序综合工具,可以帮助您编写TensorFlow代码。首先,此工具需要所需张量转换的输入输出示例。然后它运行组合搜索以找到执行转换的TensorFlow表达式。TF-Coder的输出是真正的TensorFlow代码,您可以直接在您的项目中使用它。下面详细介绍一下TF-Coder是如何帮助大家编写TensorFlow代码的。TensorFlow中的编程示例假设您要将M元素的向量(下例中的“行”)“添加”到N元素的向量,生成所有成对总和的MxN矩阵。无需深入研究TensorFlow文档来了解如何执行此操作,您可以提供一个输入-输出示例(如M=3和N=4)。输入张量:inputs={'rows':[10,20,30],'cols':[1,2,3,4],}与提供的输入张量对应的预期输出张量:output=[[11,12,13,14],[21,22,23,24],[31,32,33,34]]鉴于此信息(默认情况下已输入到TF-CoderColab中),TF-Coder工具将自动找到零点几秒内合适的TensorFlow代码:tf.add(cols,tf.expand_dims(rows,1))上面的问题很简单,只是通过例子来说明编程的思路。TF-Coder对于更难的问题也很有用。TF-Coder帮助您找到合适的函数来使用假设我们正在处理一个数学问题,例如一个项目的价格,数据集中的范围很广,从10美元以下到1000美元以上。如果这些价格直接用作特征,那么您的模型可能会过度拟合训练数据中的特定价格。如果要处理这些问题,您可能需要使用分桶将数字价格转换为分类特征。使用桶边界[10,50,100,1000]意味着低于10美元的价格应该进入桶0,10美元到50美元之间的价格应该进入桶1,等等。选择桶边界后,如何使用TensorFlow将实际价格映射到桶索引?比如给定如下桶边界和物品价格:#Inputtensorsboundaries=[10,50,100,1000]prices=[15,3,50,90,100,1001]计算每个物品的桶数:#Outputtensorbucketed_prices=[1,0,2,2,3,4]尽管TensorFlow提供了多种分桶操作,但要找出具体的分桶操作执行的操作可能很棘手。由于TF-Coder可以按行为识别数百种张量操作,您可以通过提供输入输出示例找到正确的操作:#Input-outputexampleinputs={'boundaries':[10,50,100,1000],'prices':[15,3,50,90,100,1001],}output=[1,0,2,2,3,4]很快,TF-Coder就会输出如下解:tf.searchsorted(boundaries,prices,side='right')TF-Coder以巧妙的方式组合函数现在让我们考虑另一个问题:计算一个0-1张量,该张量标识输入张量的每一行中的最大元素。#Inputtensorscores=[[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]]#Outputtensortop_scores=[[1,0,0],[0,1,0],[1,0,0],[0,1,0],[0,0,1]]注意如果同一个最大元素出现多次row,比如第三行scores,那么只标记第一个最大的元素,这样每行top_scores只有一个结果。与上一个问题不同,没有可以执行此计算的TensorFlow函数。在文档中搜索“max”,您可能会找到tf.reduce_max、tf.argmax和tf.maximum,但不清楚使用哪个?tf.reduce_max输出[0.7,0.5,0.4,0.4,1.0],tf.argmax输出[0,1,0,1,2],tf.maximum不适合,因为它只能容纳两个参数。这些功能似乎都与本示例的预期输出无关。对于此类问题,TF-Coder也可以快速解决。你可以把这个问题写成输入输出例子的形式#Input-outputexampleinputs={'scores':[[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]],}输出=[[1,0,0],[0,1,0],[1,0,0],[0,1,0],[0,0,1]]TF-Coder使用tf.one_hot和tf.argmax一起得到一个解决方案:tf.cast(tf.one_hot(tf.argmax(scores,axis=1),3),tf.int32)通过对TensorFlow操作组合的详细搜索,TF-Coder经常会找到像这样的优雅解决方案,这可能会简化和加速TensorFlow程序的开发。TF-Coder的用法还有很多,这里就不一一列举了。我相信你已经看到了它的力量。最后附上TF-Coder的相关地址:Github地址:https://github.com/google-research/tensorflow-coderGoogleColab试用地址:https://colab.research.google.com/github/google-研究/tensorflow-coder/blob/master/TF-Coder_Colab.ipynb