TensorFlow

概述

TensorFlow是Google主导的开源深度学习库。官网:

https://www.tensorflow.org/

代码:

https://github.com/tensorflow/tensorflow

TensorFlow提供了一个可视化的神经网络展示:

http://playground.tensorflow.org/

还有若干已经实现好的经典神经网络模型(比如Autoencoder、ResNet等):

https://github.com/tensorflow/models/

TensorFlow的官方教程:

http://tensorflowtutorial.net/tensorflow-tutorial

教程中文版:

http://wiki.jikexueyuan.com/project/tensorflow-zh/

TensorFlow中文社区:

http://www.tensorfly.cn/

另一个API中文版:

https://www.w3cschool.cn/tensorflow_python/

安装:

sudo pip install tensorflow

由于我的PC显卡不合要求,因此直接安装的是CPU版本,这也是最通用的版本。

TensorFlow技术栈:

CS 20SI

斯坦福最近专门为Tensorflow开设了一门课程:CS 20SI: Tensorflow for Deep Learning Research。

网址:

https://web.stanford.edu/class/cs20si/syllabus.html

课程的主讲Chip Huyen,一个越南妹子,目前在斯坦福读本科(大三)。应该说本科生上讲台的确是一件稀罕事,在这里为斯坦福的学术氛围点赞。

个人主页:

https://huyenchip.com

不用为课程的质量担心,Chip Huyen的师兄们客串了很多节课,Andrej Karpathy为课程设计了网页。

Chip Huyen可谓是一战成名。但也带来了烦恼,再去请教别人的时候,总有助教或同学会反问:“这些你不该早就知道了么?你不就是教这些的么?”

参见:

http://www.sohu.com/a/164277987_473283

一名在斯坦福教授TensorFlow教师的“忏悔”:我觉得自己像个骗子

源代码编译

Step 1:安装Bazel。

echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install bazel

Bazel的官网文档:

https://docs.bazel.build/versions/master/bazel-user-manual.html

Step 2:编译TensorFlow。

./configure
# configure的时候要选择一些东西是否支持,这里建议都选N,不然后面会包错,如果支持显卡,就在cuda的时候选择y
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package # CPU only
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package # GPU
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg #生成wheel文件

configure脚本会自动选择CPU指令集优化,因此源代码编译的TensorFlow,肯定比pip安装的要运行的快。

bazel编译相当消耗资源,在配置低的机器上,可通过如下选项限制使用资源的数量。(最常出现的后果是内存耗尽导致的假死。)

--jobs n --local_resources availableRAM(MB),availableCPU,availableIO

例子:

bazel build --jobs 2 --local_resources 850,3.0,1.0 --config=opt //tensorflow/tools/pip_package:build_pip_package

按照我的实践--local_resources其实用处不大,有的C++文件编译需要上GB空间,即使有约束也会突破。而--jobs相对好一些,一般按照每个job 1.5GB来估算,就可以保证TensorFlow顺利编译成功。

Step 3:安装TensorFlow。

sudo pip uninstall tensorflow

sudo pip install /tmp/tensorflow_pkg/tensorflow-1.3.0-cp27-cp27mu-linux_x86_64.whl

加入CPU指令集优化之后的版本,要比通用版快50%~100%,因此,编译源码安装还是很有价值的。

参考:

http://www.jianshu.com/p/b1faa10c9238

TensorFlow CPU环境SSE/AVX/FMA指令集编译

http://www.hankcs.com/ml/compile-and-install-tensorflow-from-source.html

从源码编译安装TensorFlow

http://blog.csdn.net/sinat_28731575/article/details/74633476

Mac下使用源码编译安装TensorFlow CPU版本

基本概念

Variables:维持计算图执行过程中的状态信息的变量。一般来说,这就是神经网络的参数。

Placeholders:对于每个样本都不相同的变量。比如神经网络的输入变量x和输出变量y。

声明:

x = tf.placeholder(tf.float32, [None, 784])

Placeholders在图的执行过程中,需要由真实的tensor填充之:

sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

这里的batch_xs就是用来填充x的tensor。

图计算

图计算是各个深度学习框架的中心概念,这里单独提出来讨论一下。

上图是softmax运算的计算图示例。计算图是一个有向无环图,它的结点代表原始数据和计算中间结果,边代表数据的流向。计算操作被称为Operation

因此,计算图实际上是工作流(work flow)思想在数值计算领域的拓展。这种流水线一般被称为Graph

流水线有了,还要有被加工的数据。数据在流水线上被加工的执行过程,被称为Session

Graph和Session的关系,类似于类和对象的关系。Session是Graph的动态实例。

图计算的大致步骤如下:(这里以OpenVX函数为例,因为它更接近底层和硬件。)

1.vxCreateGraph。创建计算图。

2.vxProcessGraph。运行计算图。

在大多数Tensorflow示例中,你看不到Graph的身影。但它并不是不存在,而是默认所有新加入的Operation都添加到默认的Graph。

以下是使用多个Graph的示例:

import tensorflow as tf
g1 = tf.Graph()
with g1.as_default():c1 = tf.constant([1.0])
with tf.Graph().as_default() as g2:c2 = tf.constant([2.0])with tf.Session(graph=g1) as sess1:print sess1.run(c1)
with tf.Session(graph=g2) as sess2:print sess2.run(c2)

Tensorflow对计算图的简化,不仅在于使用默认的Graph。还在于可以只计算部分的Graph。以上面的softmax运算为例,如果sess.run(add)的话,后面的ReLU和softmax运算都不会被执行。

虽然图计算是Tensorflow的主要使用方式,然而一般性的tensor计算(即非图计算),也是完全可行的。Tensorflow没有提供相关的API,直接使用numpy就可以了。

下面的动图形象的展示了计算图的前向和后向运算的过程:

参考:

http://www.algorithmdog.com/dynamic-tensorflow

动态图计算:Tensorflow 第一次清晰地在设计理念上领先

https://zhuanlan.zhihu.com/p/23932714

YJango的TensorFlow整体把握

http://www.cnblogs.com/lienhua34/p/5998853.html

Tensorflow学习笔记2:About Session, Graph, Operation and Tensor

Fused Graph

Fused Graph是TensorFlow新推出的概念。这里仍以softmax运算为例,讲一下它的基本思想。

上面的softmax运算计算图中,总共有4个operation。Fused Graph则将这4个op整合为1个op,发给运算单元。

这样不同的硬件厂商就可以自行对这个整合的op进行解释。功能强的硬件,可能直接就支持softmax运算。功能弱的硬件也不怕,反正总归可以将softmax分解为基本运算的。

Qualcomm Hexagon平台的Fused Graph实现可参见:

tensorflow/core/kernels/hexagon

上图是另一个计算图优化的例子。

参考:

https://developers.googleblog.com/2017/03/xla-tensorflow-compiled.html

XLA - TensorFlow, compiled

Eigen

Eigen是一个线性代数方面的C++模板库。tensorflow和caffe2都使用了这个库。

官网:

http://eigen.tuxfamily.org/

参见:

https://zhuanlan.zhihu.com/p/26512099

tensorflow和caffe2

TensorFlow高层封装

目前对TensorFlow的封装如下所示:

1.TensorFlow-Slim。主要提供了层一级的封装。粒度和OpenVX类似。

2.tf.contrib.learn(之前也被称为skflow)。提供了类似sklearn的接口。

前2个是TensorFlow自带的封装

3.第三个是TFLearn。在tf.contrib.learn上的封装。需单独安装:

sudo pip install tflearn

http://tflearn.org/

4.Keras。

5.TensorLayer。这个的封装粒度介于TensorFlow-Slim和TFLearn之间。

http://tensorlayer.readthedocs.io/en/latest/user/tutorial.html

6.Pretty Tensor。来自google的TensorFlow封装。

https://github.com/google/prettytensor

7.Sonnet。来自Deepmind的TensorFlow封装。

https://github.com/deepmind/sonnet

参见:

http://www.infoq.com/cn/articles/introduction-of-tensorflow-part06

深入浅出TensorFlow(六)TensorFlow高层封装

Slim

代码:

tensorflow/contrib/slim

示例:

https://github.com/mnuke/tf-slim-mnist

参见:

http://geek.csdn.net/news/detail/126133

如何用TensorFlow和TF-Slim实现图像分类与分割

实战心得:

tf-slim-mnist例子中mnist数据不是原始格式的,而是经过了datasets/download_and_convert_mnist.py的转换。

该示例执行时也没有控制台的输出信息,一度让我觉得很不方便。后来才发现,原来可以用TensorBoard查看log文件夹。

TensorBoard是一个http服务,用以监控TensorFlow的执行。

tensorboard --logdir=log

启动之后,用浏览器打开http://localhost:6006即可。

模型文件

tensorflow model包含2个文件:

a)Meta graph:

使用protocol buffer来保存整个tensorflow graph.例如所有的variables, operations, collections等等。这个文件使用.meta后缀。

b) Checkpoint file:

二进制文件包含所有的weights,biases,gradients和其他variables的值。这个文件使用.ckpt后缀,有2个文件:

mymodel.data-00000-of-00001

mymodel.index

.data文件就是保存训练的variables我们将要使用它。

和这些文件一起,tensorflow还有一个文件叫checkpoint用来简单保存最近一次保存checkpoint文件的记录。

保存模型

w1 = tf.Variable(tf.random_normal(shape=[2]), name='w1')
w2 = tf.Variable(tf.random_normal(shape=[5]), name='w2')
saver = tf.train.Saver()
sess = tf.Session()
sess.run(tf.global_variables_initializer())
saver.save(sess, 'my_test_model')

加载模型

new_saver = tf.train.import_meta_graph('my_test_model-1000.meta')
new_saver.restore(sess, tf.train.latest_checkpoint('./‘))

参考:

http://www.cnblogs.com/azheng333/archive/2017/06/09/6972619.html

Tensorflow模型保存和加载

http://blog.csdn.net/wiinter_fdd/article/details/72821923

Tensorflow中的模型持久化

TFRecord

TFRecord是TensorFlow官方定义的存放样本数据文件。

参考:

http://www.cnblogs.com/antflow/p/7299029.html

TFRecord的使用

https://zhuanlan.zhihu.com/p/27481108

TensorFlow直接读取图片和读写TFRecords速度对比

多核(multicore),多线程(multi-thread)

在Tensorflow程序中,我们会经常看到”with tf.device(“/cpu:0”): “ 这个语句。单独使用这个语句,而不做其他限制,实际上默认tensorflow程序占用所有可以使用的内存资源和CPU核。

参考:

http://deepnlp.org/blog/tensorflow-parallelism/

Tensorflow并行:多核(multicore),多线程(multi-thread)

TensorFlow(一)相关推荐

  1. tensorflow 1.x Saver(保存与加载模型) 预测

    20201231 tensorflow 1.X 模型保存 https://blog.csdn.net/qq_35290785/article/details/89646248 保存模型 saver=t ...

  2. python 虚拟环境 tensorflow GPU

    拿到一个新的容器之后,怎么创建一个独立的GPU训练环境呢?之前弄的时候总是零零散散的,现在把它总结在这里,供自己以及有需要的朋友查阅. conda创建 1.1 下载anaconda wget -c h ...

  3. API pytorch tensorflow

    pytorch与tensorflow API速查表 方法名称 pytroch tensorflow numpy 裁剪 torch.clamp(x, min, max) tf.clip_by_value ...

  4. tensor转换 pytorch tensorflow

    一.tensorflow的numpy与tensor互转 1.数组(numpy)转tensor 利用tf.convert_to_tensor(numpy),将numpy转成tensor >> ...

  5. Tensorflow会话

    Tensorflow中的会话是来执行定义好的运算的.会话拥有并管理Tensorflow程序运行时的所有资源.当计算完成之后需要关闭会话来帮助系统回收资源,否则可能出现资源泄露的问题. Tensorfl ...

  6. tensorflow问题

    20210121 ImportError: No module named 'tensorflow.python' https://stackoverflow.com/questions/414156 ...

  7. tensorflow兼容处理 tensorflow.compat.v1 tf.contrib

    20201130 问题提出: v1版本中tensorflow中contrib模块十分丰富,但是发展不可控,因此在v2版本中将这个模块集成到其他模块中去了.在学习tensorflow经常碰到tf.con ...

  8. ImportError: No module named tensorflow.compat.v1 忽略已经安装的某个包版本 忽略已安装版本...

    ImportError: No module named tensorflow.compat.v1 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声 ...

  9. 请注意更新TensorFlow 2.0的旧代码

    TensorFlow 2.0 将包含许多 API 变更,例如,对参数进行重新排序.重新命名符号和更改参数的默认值.手动执行所有这些变更不仅枯燥乏味,而且容易出错.为简化变更过程并让您尽可能顺畅地过渡到 ...

  10. 独家 | TensorFlow 2.0将把Eager Execution变为默认执行模式,你该转向动态计算图了...

    机器之心报道 作者:邱陆陆 8 月中旬,谷歌大脑成员 Martin Wicke 在一封公开邮件中宣布,新版本开源框架--TensorFlow 2.0 预览版将在年底之前正式发布.今日,在上海谷歌开发者 ...

最新文章

  1. js canvas游戏初级demo-上下左右移动
  2. SendDlgItemMessage
  3. 准官宣?余承东证实华为已有自研操作系统
  4. oracle 常用命令大汇总
  5. LINUX内核经典面试题30道及解答
  6. DIV布局之position详解
  7. Android Studio 中如何引入 layoutlib.jar?
  8. 使用AngularJS 进行Hybrid App 开发已经有一年多时间了,这里做一个总结
  9. CodeForces - 1358D The Best Vacation(前缀和+尺取)
  10. android 通知历史,Android P新特性:追踪应用通知历史
  11. 软考网络工程师学习笔记3-广域通信网
  12. 2020年11月DB-Engines排行:Oracle归零年内涨幅 PostgreSQL增长第一独秀
  13. python for everybody作业和测试答案_【计算题】编写函数,模拟 Python 内置函数 reversed() 。...
  14. 工作一周年,带你认识杭州最好的电商公司
  15. python语法基础知识第四关第二题_Python基础语法习题二
  16. java_servlet字符过滤器filter
  17. linux进程数和句柄数
  18. scanf 之 %2s 与 %2d
  19. 实用工具分享-桌面美化软件Fences
  20. 智慧城市之城市应急智慧系统

热门文章

  1. 《编程之美》读书笔记(十):“链表相交”扩展问题
  2. 带宽测量:pathload编译及运行
  3. 在线场景感知:图像稀疏表示-ScSPM和LLC总结(lasso族、岭回归)
  4. Matlab移植到Eigen用到的词条
  5. 配置OpenCV的Qt开发环境
  6. 浅入浅出Typescript Decorators
  7. ANdroid O MeidiaPlayer 深入理解(一)
  8. 10月12日云栖精选夜读:【直击2017杭州·云栖大会】TECH INSIGHT企业迁云实战专场...
  9. Qucs 产生大文件的一个bug
  10. 出远门需要检查的物件