斯坦福tensorflow教程(一) tensorflow概述
课程链接:https://web.stanford.edu/class/cs20si/syllabus.html
Tensorflow简介
TensorFlow™ 是一个使用数据流图进行数值计算的开放源代码软件库。图中的节点代表数学运算,而图中的边则代表在这些节点之间传递的多维数组(张量)。借助这种灵活的架构,您可以通过一个 API 将计算工作部署到桌面设备、服务器或移动设备中的一个或多个 CPU 或 GPU。TensorFlow 最初是由 Google Brain 团队(隶属于 Google 机器智能研究部门)中的研究人员和工程师开发的,旨在用于进行机器学习和深度神经网络研究。但该系统具有很好的通用性,还可以应用于众多其他领域。
中文官网
为什么选择tensorflow
- Python 接口
- 便捷性/灵活性:可以将计算模型部署到一个或多个桌面、服务器、移动等多种设备(CPUs or GPUs);适用于多种系统 Raspberry Pi, Android, Windows, iOS, Linux到 server farms
- 可视化:了解下TensorBoard
- 可以保存/还原模型
- 自动微分(Auto-differentiation autodiff )
- 庞大社区,非常流行(>30万提交次数,>8.5万相关开源库)
- 很多惊艳的基于tensorflow的项目
-
WaveNet: A Generative Model for Raw Audio (DeepMind, 2016)
-
Dermatologist-level classification of skin cancer with deep neural networks (Esteva, Kuprel, et al.,
Nature 2017)
-
Magenta (Google)
Use machine learning to create compelling art and music. Their projects are really fun! For example, please check out Draw Together with a Neural Network.
基于Tensorflow的框架
有很多基于Tensorflow构建的APIs,比如一些流行的有Keras,TFLearn和Sonnet.这些高级框架可以实现更快的实验步骤(仅需很少代码),同时这些框架也吸引了大量用户。然而Tensorflow主要的目的不是提供“开箱即用”的机器学习方法。而是,Tensorflow提供了一套强大的计算函数和类,允许用户从实验中定义自己的model。这个过程可能非常复杂,但是可以提供了更多可能性,你可以根据自己的想法,基于Tensorflow构建任何结构的模型
资源
-
StackOverflow
也有一些英文指导书: -
Aurélien Géron’s Hands-On Machine Learning with Scikit-Learn and TensorFlow (O’Reilly, March 2017)
-
François Chollet’s Deep Learning with Python (Manning Publications, November 2017)
-
Nishant Shukla’s Machine Learning with TensorFlow (Manning Publications, January 2018)
-
Lieder et al.’s Learning TensorFlow A Guide to Building Deep Learning Systems (O’Reilly, August 2017)
Tensorflow基础
为了理解Tensorflow,我们首先要明确以下几点:
- 使用图 (graph) 来表示计算任务.
- 在被称之为 会话 (Session) 的上下文 (context) 中执行图.
- 使用 tensor 表示数据.
- 通过 变量 (Variable) 维护状态.
数据流图 Data Flow Graphs
Tensorflow将计算与执行分离开来:
阶段1:创建一张图,定义好图中的就算
阶段2:使用session(会话)去执行图中的计算
什么是tensor
tensor 看作是一个 n 维的数组或列表.
执行下面并不会输出8,而是输出tensor相关信息
需要创建一个session,然后在session计算图,取出a的值
为了取回操作的输出内容, 可以在使用 Session 对象的 run() 调用 执行图时, 传入一些 tensor, 这些 tensor 会帮助你取回结果. 在之前的例子里, 我们只取回了单个节点 state, 但是你也可以取回多个 tensor:
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.mul(input1, intermed)
with tf.Session() as sess:
result = sess.run([mul, intermed])
print result
# 输出:
# [array([ 21.], dtype=float32), array([ 7.], dtype=float32)]
需要获取的多个 tensor 值,在 op 的一次运行中一起获得(而不是逐个去获取 tensor)。
更多关于Tensorflow的计算和操作参考官方文档