Lecture note 1: Introduction to TensorFlow(斯坦福Tensorflow课程)

Lecture note 1: Introduction to TensorFlow

 写“TensorFlow for Machine Intelligence”这本书的人确实说明了TensorFlow存在的理由:

“ While the mathematical concepts behind deep learning have been around for decades,programming libraries dedicated to creating and training these deep models have only been available in recent years.”

 也就是说,深度学习的理论研究已经有数十年了,但是用来实现和训练的程序库却是在最近几年发展起来的。
不幸的是,大多数库在灵活性和可生产性之间有很大的权衡。灵活的库对于研究新颖的模型架构是非常有用的,但是通常要么太慢,要么无法在生产中使用。另一方面,快速、高效的库可以在分布式硬件上实现,但是他们通常专注于特定类型的神经网络,不适合研究新的更好的模型。这让决策者陷入了两难的境地:我们是否应该尝试对不灵活的库进行研究,这样我们就不需要重新实现代码,或者我们应该使用一个用于研究的库和一个完全不同的库?
如果我们选择前者,我们可能无法测试出不同类型的神经网络模型;如果我们选择后一种情况,我们必须维护可能具有完全不同的api的代码。
我们是否有资源呢?
TensorFlow旨在解决这一困境。

So what’s Tensorflow?

 TensorFlow最初是由Google作为内部机器学习工具创建的,但它的实现是在2015年11月的Apache 2.0许可下开源的。为了更好的理解它是什么,让我们来看看它的创造者是怎么说的。
在TensorFlow’s 的官网上,我们可以看到:

Tagline:
An open-source software library for Machine Intelligence
Definition:
TensorFlow™ is an open source software library for numerical computation using data flow graphs.

 我们可以看到,TensorFlow是开源的。不过,请注意,我们在GitHub上看到的TensorFlow的实现是开源的。谷歌也有自己的内部版本。据说,谷歌之所以这么做,是因为TensorFlow与其他内部工具之间的复杂关系,并不是因为谷歌“囤积了好东西”。我们期待是好的原因。
我们看到的下一个关键短语是TensorFlow是一个“software library for Machine Intelligence”。它是由大公司开发的十多个机器智能库中的一个,可能是最新的一个。对于当前的深度学习库列表,请访问此链接

Why TensorFlow

这里写图片描述
 有这么多可以选择的库,为什么要选择Tesorflow呢?
我们选择库的第一个标准是popular.根据我们在斯坦福大学的同行们的观察,在这些名单中,四大最受欢迎的是“theano”、“torch”、“caffe”和“TensorFlow”。
“torch”框架是在Lua写的,这是一种很好的语言,但不幸的是,我们对它并不熟悉。在游戏开发社区和深度学习社区之外,它也不是很受欢迎。
对于Theano来说, “Fundamentals of Deep Learning”一书对Tensorflow和Theano进行了一个很好的比较:
 “首先,Theano有一个额外的“graph compilation”,在建立某种深度学习架构的时候这一步骤花费了大量的时间。虽然与训练时间相比,它很小,但在编写和调试新代码时,这一编译阶段却令人沮丧。
 其次,与Theano相比,TensorFlow有一个更简洁的界面。许多的模型可以用更少的行表达,而不牺牲框架的表达能力。
 最后,TensorFlow是在考虑生产时使用的,而Theano是由研究人员设计的,几乎纯粹是为了研究目的。
 因此,TensorFlow有许多的开箱即用的特性和使它更好的选择适合实际系统(能够运行在移动环境中,轻松地构建模型,在单个主机上跨越多个gpu,和训练大规模网络分布式的方式)。”
 基于这些原因TensorFlow成为了深度学习库的选择。概括一下,我们选择TensorFlow是因为:

● Python API
● Portability: deploy computation to one or more CPUs or GPUs in a desktop, server, or mobile device with a single API
● Flexibility: from Raspberry Pi, Android, Windows, iOS, Linux to server farms
● Visualization (TensorBoard is da bomb)
● Checkpoints (for managing experiments)
● Auto-differentiation autodiff (no more taking derivatives by hand. Yay)
● Large community (10,000 commits and 3000 TF-related repos in one year)
● Awesome projects already using TensorFlow

 TensorFlow是新的,但它已经在行业和研究领域获得了发展。在293名报名参加课程CS 20SI课程:“深度学习研究的TensorFlow”的学生中,打破了深度学习库的使用情况。这并不意味着学生们以前从未使用过任何深度学习库。
这里写图片描述
这里写图片描述
使用TensorFlow的公司
Google
DeepMind
OpenAI
Snapchat
Uber
Airbus
eBay
Dropbox
A bunch of startups(一些创业公司)

TensorFlow上的一些很cool的projects
DeepMind’s WaveNet Text to speech
Google Brain’s Magenta project that uses machine learning to create compelling art and music
Neural Style Translation
Major Improvement to Google Translate
这里写图片描述
这里写图片描述
这里写图片描述

 还有很多projects,在Google Research Blog,2016:
●Australian的海洋生物学家用TensorFlow从tens of thousands of高清图片中发现海象,来更好的知道他们的数量,他们已经有灭绝的威胁。
●一个enterprising的日本种植黄瓜的农民使用TensorFlow训练一个模型,来对黄瓜进行大小、形状等的分类。
●放射学研究人员用TensorFlow来通过医学扫描图像来识别帕金森的前兆。
Bay Area的数据科学家装配TensorFlow 和 Raspberry Pi 来分析加州铁路的轨道。
是不是很cool?

Getting started with one-liner Tensorflow
这部分很cool,但是不是很重要,你可以选择跳过。
这里写图片描述
1.TF Learn (tf.contrib.learn)
 TensorFlow有一个简化的接口,TFLearn(tensorflow.contrib.learn),它提供给用户可以简单调用的现成的模型。这是为了模仿scikit学习深度学习的目的,“为了顺利地从一个线性学习的机器学习世界过渡到构建不同形状的ML模型的更加开放的世界。”事实上,TFLearn最初是一个叫做Scikit Flow(SKFlow)的独立项目。
 TFLearn允许你加载数据,构造一个模型,使用训练数据来匹配你的模型,评估精度,每一个都使用一行代码。在TF中可以调用的一些模型包括线性分类器、线性回归器、DNN分类器。Google提供了关于如何使用TF学习构建定制模型的很好的教程。
 关于TFLearn的DNN分类器的文档:从TensorFlow的例子中获取的一个例子。
iris.py

#Load dataset.  
iris = tf.contrib.learn.datasets.load_dataset('iris')  
x_train, x_test, y_train, y_test = cross_validation.train_test_split(
iris.data, iris.target, test_size=0.2, random_state=42)  
# Build 3 layer DNN with 10, 20, 10 units respectively.
feature_columns = tf.contrib.learn.infer_real_valued_columns_from_input(
x_train)  
classifier = tf.contrib.learn.DNNClassifier(
feature_columns=feature_columns, hidden_units=[10, 20, 10], n_classes=3)
# Fit and predict.  
classifier.fit(x_train, y_train, steps=200)  
predictions = list(classifier.predict(x_test, as_iterable=True))  
score = metrics.accuracy_score(y_test, predictions)   
print('Accuracy: {0:f}'.format(score))

 你可以看到,TFLearn让你用一行代码完成数据加载数据,在另一行中分割数据,你可以调用内置的深层神经网络分类器DNN分类器,选择隐藏单元的数量。在这种情况下,第一层有10个隐藏单元,第二个层有20个隐藏单元,第三层有10个隐藏单元。你还可以指定标签类的数量、优化的方法(例如,梯度下降),或者初始权重。
 您可以访问TF学习示例库,了解更多关于TFLearn的例子。但是,请记住,大多数内置的模型都是使用弃用的函数实现的,所以如果您调用它们,您会看到许多警告。
2. TF-Slim (tf.contrib.slim)
 另一个简单的API叫做“tf-slim”,它可以简化构建、训练和评估神经网络。
3. High level APIs on top TensorFlow
 在TensorFlow上面构建了许多高级api。一些最流行的api包括Keras(keras@GitHub)、TFLearn(tflearn@GitHub)和Pretty Tensor(prettytensor@GitHub)。
注意:你不应该将高级API TFLearn(在TF和学习之间没有空格)与简化的接口TF学习混淆。
TFLearn支持大多数最近的深度学习模式,如:卷积、LSTM、BiRNN、ResNets、Generative networks以及特征诸如BatchNorm、PReLU等。TFLearn是由Aymeric Damien开发的。
 然而,TensorFlow的主要目的不是提供开箱即用的机器学习解决方案。相反,TensorFlow提供了一套广泛的功能和类,允许用户从头定义模型。这要复杂得多,但是提供了更多的灵活性。您可以构建几乎任何可以在TensorFlow中想到的体系结构。

Data Flow Graph

 在定义中的另一个关键词是“data flow graph”。这个关键词意味着TF是通过图来计算的。
可以从幻灯片的23页开始看到更多的细节。
session还将分配内存以存储该变量的当前值。
正如您所看到的,变量的值仅在一个session中有效。如果我们在第二次session中尝试查询这个值,TensorFlow将会产生一个错误因为变量没有被初始化。

PPT下载连接https://web.stanford.edu/class/cs20si/syllabus.html

猜你喜欢

转载自blog.csdn.net/qq_32799915/article/details/76999878