专栏名称: 机器学习研究会
机器学习研究会是北京大学大数据与机器学习创新中心旗下的学生组织,旨在构建一个机器学习从事者交流的平台。除了及时分享领域资讯外,协会还会举办各种业界巨头/学术神牛讲座、学术大牛沙龙分享会、real data 创新竞赛等活动。
目录
51好读  ›  专栏  ›  机器学习研究会

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

机器学习研究会  · 公众号  · AI  · 2017-11-23 22:58

正文

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

或者点击阅读原文



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

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

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

在本文中,我将介绍的就是 TensorFlow 的另一面,它的一般编程语言表达方式。我利用 TensorFlow 图实现了一些算法,诸如 FizzBuzz Bubble Sort Quick Sort Binary 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







请到「今天看啥」查看全文