利用 TensorFlow 实现排序和搜索算法

2017 年 11 月 23 日 机器学习研究会

博客地址:http://www.jianshu.com/p/1da012a83b74

或者点击阅读原文



TensorFlow 所构成的计算图是图灵完备的。

当我们提到 TensorFlow 的时候,我们仅仅只会关注它是一个很好的神经网络和深度学习的库。但是,它也满足数据流编程(DFP)的各个方面。

由于 TensorFlow 具有 tf.cond 和 tf.while_loop 函数,前者可以处理判断语句,后者可以处理循环语句,所以它就具有一般编程语言相同的表达式。简单的说,我们可以用 C 语言或者 Python 语言实现的排序和搜索算法都可以在 TensorFlow 图中实现。

在本文中,我将介绍的就是 TensorFlow 的另一面,它的一般编程语言表达方式。我利用 TensorFlow 图实现了一些算法,诸如 FizzBuzzBubble SortQuick SortBinary Search 等等。

在 TensorFlow 中实现算法

Fizz Buzz 问题

请依次打印从1至100的整数,在该数能被3整除的时候,打印"Fizz",能被5整除的时候打印"Buzz",如果既能被3又能被5整除的时候,打印"FizzBuzz"。

  
    
    
    
  1. import tensorflow as tf

  2. class FizzBuzz():

  3.    def __init__(self, length=30):

  4.        self.length = length  # 程序需要执行的序列长度

  5.        self.array = tf.Variable([str(i) for i in range(1, length+1)], dtype=tf.string, trainable=False)  # 最后程序返回的结果

  6.        self.graph = tf.while_loop(self.cond, self.body, [1, self.array],)   # 对每一个值进行循环判断

  7.    def run(self):

  8.        with tf.Session() as sess:

  9.            tf.global_variables_initializer().run()

  10.            return sess.run(self.graph)    

  11.    def cond(self, i, _):

  12.        return (tf.less(i, self.length+1)) # 判断是否是最后一个值

  13.    def body(self, i, _):

  14.        flow = tf.cond(

  15.            tf.equal(tf.mod(i, 15), 0),  # 如果值能被 15 整除,那么就把该位置赋值为 FizzBuzz

  16.                lambda: tf.assign(self.array[i - 1], 'FizzBuzz'),

  17.                lambda: tf.cond(tf.equal(tf.mod(i, 3), 0), # 如果值能被 3 整除,那么就把该位置赋值为 Fizz

  18.                        lambda: tf.assign(self.array[i - 1], 'Fizz'),

  19.                        lambda: tf.cond(tf.equal(tf.mod(i, 5), 0),   # 如果值能被 5 整除,那么就把该位置赋值为 Buzz

  20.                                lambda: tf.assign(self.array[i - 1], 'Buzz'),

  21.                                lambda: self.array  # 最后返回的结果

  22.                )

  23.            )

  24.        )

  25.        return (tf.add(i, 1), flow)

  26. if __name__ == '__main__':

  27.    fizzbuzz = FizzBuzz(length=50)

  28.    ix, array = fizzbuzz.run()

  29.    print(array)

输出结果:

  
    
    
    
  1. ['1' '2' 'Fizz' '4' 'Buzz' 'Fizz' '7' '8' 'Fizz' 'Buzz' '11' 'Fizz' '13'

  2. '14' 'FizzBuzz' '16' '17' 'Fizz' '19' 'Buzz' 'Fizz' '22' '23' 'Fizz'

  3. 'Buzz' '26' 'Fizz' '28' '29' 'FizzBuzz' '31' '32' 'Fizz' '34' 'Buzz'

  4. 'Fizz' '37' '38' 'Fizz' 'Buzz' '41' 'Fizz' '43' '44' 'FizzBuzz' '46' '47'

  5. 'Fizz' '49' 'Buzz']

Linear Search

给定一个序列和一个目标值,从这个序列中找到这个目标值的位置。



转自:coderpai


完整内容请点击“阅读原文”

登录查看更多
5

相关内容

Google发布的第二代深度学习系统TensorFlow
【Google】利用AUTOML实现加速感知神经网络设计
专知会员服务
29+阅读 · 2020年3月5日
深度强化学习策略梯度教程,53页ppt
专知会员服务
178+阅读 · 2020年2月1日
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
从零开始深度学习第8讲:利用Tensorflow搭建神经网络
Tensorflow Eager Execution入门指南
专知
6+阅读 · 2018年4月16日
代码分享系列(1)之感知机【代码可下载】
机器学习算法与Python学习
4+阅读 · 2018年2月10日
tensorflow LSTM + CTC实现端到端OCR
数据挖掘入门与实战
8+阅读 · 2017年11月15日
手把手教你由TensorFlow上手PyTorch(附代码)
数据派THU
5+阅读 · 2017年10月1日
利用TensorFlow实现多元逻辑回归和多元线性回归
数据挖掘入门与实战
5+阅读 · 2017年7月4日
Deep Learning in Video Multi-Object Tracking: A Survey
Arxiv
57+阅读 · 2019年7月31日
Arxiv
18+阅读 · 2019年1月16日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
5+阅读 · 2018年3月28日
Arxiv
3+阅读 · 2018年1月31日
Arxiv
20+阅读 · 2018年1月17日
VIP会员
相关资讯
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
从零开始深度学习第8讲:利用Tensorflow搭建神经网络
Tensorflow Eager Execution入门指南
专知
6+阅读 · 2018年4月16日
代码分享系列(1)之感知机【代码可下载】
机器学习算法与Python学习
4+阅读 · 2018年2月10日
tensorflow LSTM + CTC实现端到端OCR
数据挖掘入门与实战
8+阅读 · 2017年11月15日
手把手教你由TensorFlow上手PyTorch(附代码)
数据派THU
5+阅读 · 2017年10月1日
利用TensorFlow实现多元逻辑回归和多元线性回归
数据挖掘入门与实战
5+阅读 · 2017年7月4日
相关论文
Deep Learning in Video Multi-Object Tracking: A Survey
Arxiv
57+阅读 · 2019年7月31日
Arxiv
18+阅读 · 2019年1月16日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
5+阅读 · 2018年3月28日
Arxiv
3+阅读 · 2018年1月31日
Arxiv
20+阅读 · 2018年1月17日
Top
微信扫码咨询专知VIP会员