0%

Tensorflow 一瞥

今天跟大家分享一下时下非常流行的一个机器学习框架:TensorFlow。希望大家可以一瞥 TensorFlow 的易用性和强大功能。

TensorFlow 目前在我司的技术雷达上面处于 assess 阶段。

TensorFlow 是什么

TensorFlow 诞生于 Google 公司 Google Brain 项目。其前身是一个名为 DistBelief 的系统,DistBelief 是 Google 内部使用非常广泛的一个机器学习系统。TensorFlow 作为 github 上面的一个很火的开源项目,它的第一个提交是在 2015 年 11 月。到现在也不过刚好一年时间。

TensorFlow 提供的 API 库可以用于编写富有表现力的程序。同时 TensorFlow 底层使用 c++ 实现,其性能也是不错的。

TensorFlow 在系统设计上使用一个有状态的数据流图来描述计算。使用 TensorFlow 时,需要先定义好计算图,以便 TensorFlow 可以在内部进行分布式的调度,然后一般会使用向计算图填充数据的形式进行迭代计算。

TensorFlow 支持的系统非常广泛,从移动设备到桌面电脑再到大型分布式系统,从 CPU 到 GPU,TensorFlow 都提供了支持。

TensorFlow 为了便于高效率的开发,同时也是顺应社区的技术潮流,提供的是 Python 的 API。同时,也可以直接使用 C++ 进行开发。目前还有 Rust,Haskell 的方言支持。

为什么要用 TensorFlow

良好而活跃的社区

丰富的入门教程

TensorFlow 有很多 Tutorial 入门教程,大大降低了入门的门槛。官方的教程已经不错了,社区技术爱好者们还贡献了很多相关的教程。我个人用过的教程,可以列举如下:

大量现成的机器学习模型

Google 内部使用 TensorFlow 实现了很多性能很好的机器学习模型(这里的性能指模型表现好,如分类错误率低),这些模型也都在 github 上面开源了出来。如为图片生成标题的模型,识别街道名称的模型等等。我们可以方便的阅读学习这些模型,同时也可以作为一个很好的起点,用于研究设计自己的模型。

提供了更简单的机器学习的接口

TensorFlow 同时提供了一个简单的机器学习接口。几行代码即可完成模型训练和使用。

丰富的周边工具

TensorFlow 还提供了用于可视化参数的 TensorBoard,大大方便了模型的调优工作。同时还提供了 Caffe 到 TensorFlow 模型转换的工具。

TensorFlow 已经在业界广泛使用。

众所周知的如 Google 自己,京东,Uber,DeepMind,SnapChat,Twitter 等等,都在公司内部使用这个框架进行机器学习的研究。

Google 趋势表现抢眼

从 Google 趋势来看,TensorFlow 也已成为当前非常流行的机器学习框架了。

一个简单的例子:在 TensorFlow 中使用 Logistic Regression 来进行图片分类

下面用一个简单的例子演示一下 TensorFlow 的使用。这个例子中我们会对 MNIST 手写数字图片库进行分类。

MNIST 数据集的是一个非常基础而简单的用于机器学习的数据集。下载好这个数据集之后,可以看到其包含的图片如下(一个数字对应一张图片):

我们将要使用的分类模型也是基础的 Logistic Regression 模型。

这个模型用数学公司来描述就是如下这样:

模型对应的核心代码 TensorFlow 代码就是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# Describe Graph

Y = tf.nn.softmax(tf.matmul(XX, W) + b)
cross_entropy = -tf.reduce_mean(Y_ * tf.log(Y)) * 1000.0 # normalized for batches of 100 images
train_step = tf.train.GradientDescentOptimizer(0.005).minimize(cross_entropy)

predict = tf.argmax(tf.nn.softmax(tf.matmul(X, W) + b), 1)

# Train the model
sess = tf.Session()
sess.run(tf.initialize_all_variables())
for i in range(10000):
batch_X, batch_Y = mnist.train.next_batch(100)
c = sess.run([cross_entropy], feed_dict={X: batch_X, Y_: batch_Y})

# Predict
labels = sess.run([predict], feed_dict={...})

完整的代码可以参考这里的 tutorial

欢迎关注我的其它发布渠道

未找到相关的 Issues 进行评论

请联系 @gmlove 初始化创建