19

现在知道还不算晚,输入示例自动生成代码,谷歌开源这项神器要火

 3 years ago
source link: https://flashgene.com/archives/149839.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

操作张量并非易事,因为它需要很多先决条件,例如跟踪多个维度,Dtype兼容性,数学正确性和张量形状等。当然最大的挑战还是从数百种可用选项中确定正确的TensorFlow操作。

3u2qy2B.jpg!mobile

假如不需要你进行对张量操纵进行编码,你只需要通过一个说明性的例子来演示,有个工具就能生成相应的代码,你会选择这个工具幺?如果会的话,谷歌的TensorFlow Coder(TF-Coder)可以帮你实现这一点。

TF-Coder是一个程序合成工具,可以帮助你编写TensorFlow代码,首先,这个工具需要输入所需张量变换的输入-输出示例。然后,它会运行一个组合搜索来查找执行转换的TensorFlow表达式。TF-Coder的输出是真实的TensorFlow代码,你可以直接将它用在你的项目中。

接着,我们再来详细介绍一下TF-Coder是如何帮助你编写TensorFlow代码。

在TensorFlow中的编程示例

假如你想将包含 M 个元素的向量(下例中指‘rows’)和包含 N 个元素的向量“想加”,生成一个包含所有成对和的 M x N 矩阵。你可以提供一个输入输出示例(如M=3和N=4),而不需要深入研究TensorFlow文档来找出如何做到这一点。

输入张量:

inputs = { 
 
'rows': [10, 20, 30], 
 
'cols': [1, 2, 3, 4], 
 
}

所提供的输入张量对应的期望输出张量:

output = [[11, 12, 13, 14], 
 
[21, 22, 23, 24], 
 
[31, 32, 33, 34]]

给定这些信息(默认情况下已经输入到TF-Coder Colab中),TF-Coder工具会在零点几秒内自动找到合适的TensorFlow代码:

tf.add(cols, tf.expand_dims(rows, 1))

上面的问题非常简单,只是通过示例来说明编程的思想。TF-Coder对于更难的问题也很有用。

TF-Coder帮助你找到要使用的正确函数

假设我们正在处理一个数学问题,比如商品的价格,数据集中范围很广,从$10以下到$1000以上。如果这些价格被直接用作特征,那幺你的模型可能会对训练数据中的特定价格过度拟合。

假如要处理这些问题,你可能需要使用bucketing将数字价格转换成类别特征。使用bucket边界 [10, 50, 100, 1000] 意味着低于10美元的价格应归入bucket 0,10美元至50美元的价格应归入bucket 1,依此类推。

选择bucket边界之后,如何使用TensorFlow将实际价格映射到bucket索引?诸如给定以下bucket边界和物品价格:

# Input tensors 
 
boundaries = [10, 50, 100, 1000] 
 
prices = [15, 3, 50, 90, 100, 1001]

计算每个项的bucket编号:

# Output tensor 
 
bucketed_prices = [1, 0, 2, 2, 3, 4]

尽管TensorFlow提供了各种bucketing操作,但要找出哪个特定的操作执行这种确切的bucketing可能比较棘手。由于TF-Coder可以通过行为识别数百个张量操作,你可以通过提供一个输入-输出示例来查找正确的操作:

# Input-output example 
 
inputs = { 
 
'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的张量,它能识别输入张量每一行中的最大元素。

# Input tensor 
 
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]] 
 
# Output tensor 
 
top_scores = [[1, 0, 0], 
 
[0, 1, 0], 
 
[1, 0, 0], 
 
[0, 1, 0], 
 
[0, 0, 1]]

注意,如果同一最大元素在一行中出现多次,比如在第三行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-output example 
 
inputs = { 
 
'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]], 
 
} 
 
output = [[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程序的开发。

MBba2eI.jpg!mobile

关于TF-Coder的用法还有很多,这里就不一一列举了,相信你已经见识到他的强大了,最后附上TF-Coder相关地址:

Github地址:https://github.com/google-research/tensorflow-coder

Google Colab 试用地址:https://colab.research.google.com/github/google-research/tensorflow-coder/blob/master/TF-Coder_Colab.ipynb


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK