原文链接: https://medium.com/@camrongodbout/tensorflow-in-a-nutshell-part-one-basics-3f4403709c9d#.31jv5ekoy

学习世界上最流行的深度学习框架的最快最简单的教程

(其实这个系列写的差强人意,但是的确是学习tensflow精简的教程,比较适合新手入门,高手请绕行--------译者注)

tensorflow是google公司推出的深度学习框架。深度学习是一类采用多层神经网络的机器学习算法。深度学习的思想最早在1943年由神经物理学家Warren McCulloch和数学家Walter Pitts提出,他们在一篇文章里面讨论了神经元的工作原理以及如何采用数字电路模拟一个简单的神经网络。

从那时候起,很多工作逐步发展起来。然而, 伴随这些高度精确的数学模型的是复杂的计算量。近年来,随着GPU和CPU处理速度的提升,深度学习变得流行起来。

tensorflow的设计,受到了机器处理速度限制的影响。这个工具在2015年11月开源,目前能够在包括手机在内的各种计算机上运行。它可以用来编写各种训练模型,也是此时此刻最流行的深度学习框架。

计算图的基础知识

在tensorflow里面,任何事情都是构建在计算图的基础上的。如果你之前用过theano,这部分内容会看起来很熟悉。我们可以把计算图当作网络的节点,其中,每个节点都表示某种操作,就像运行某个函数一样,比如简单的加减,或者复杂的多变量运算。

每个运算可以返回一个值,或者其他的张量,这些张量可以用在后续图中。下面是一些简单的例子。

 import tensorflow as tf

 tf.add(1, 2)
# tf.sub(2, 1)
# tf.mul(2, 2)
# tf.div(2, 2)
# tf.mod(4, 5)
# tf.pow(3, 2)
# # x < y
tf.less(1, 2)
# True # x <= y
tf.less_equal(1, 1)
# True tf.greater(1, 2)
# False tf.greater_equal(1, 2)
# False tf.logical_and(True, False)
# False tf.logical_or(True, False)
# True tf.logical_xor(True, False)
# True

每个操作都能处理常量,矩阵,数组,或者多维矩阵。多维矩阵也就是一个张量,而二维张量就是一个m * m的矩阵。

 import tensorflow as tf

 # create a constant 2X2 matrix
tensor_1 = tf.constant([[1., 2.], [3.,4]]) tensor_2 = tf.constant([[5.,6.],[7.,8.]]) # create a matrix multiplication operation
output_tensor = tf.matmul(tensor_1, tensor_2) # have to run the graph using a session
sess = tf.Session() result = sess.run(output_tensor)
print(result) sess.close()

上述代码创建了两个常数张量,并把它们的成绩输出来。这个简单的例子展示了如何创建一个图并且执行它。所有需要的输入都自动运行,而且它们还可以并行的执行。执行过程涉及到图中的三个操作,创建两个常量,和矩阵的乘法。

在tensorflow中,我们创建的变量和操作会自动的加到图中。在引入tensorflow的时候,系统会自动的构建一个缺省的图。创建一个图,而不采用默认的图,在一个文件构建多个独立模型的时候,是非常有用的。

 new_graph = tf.Graph()
with new_graph.as_default():
new_g_const = tf.constant([1., 2.])

所有在with new_graph.as_default()之外的变量和操作会加到系统默认的图上,下面的代码可以得到一个默认图的句柄。

 default_g = tf.get_default_graph()

大部分情况下,这是得到系统默认图最好的方法。

运行周期

tensorflow中有两种运行周期。

tf.Session()

它封装了操作和张量执行的环境。运行周期可以有它们自己的变量,队列。所以,运行周期结束的时候,需要调用close()函数结束掉。运行周期有三个可选的参数,分别为:

1. target:要连接的执行引擎

2. graph:需要启动的图

3.config:一些配置

tf.InteractiveSession()

它和前面的tf.session()非常类似,只不过这个执行周期是为IPython和 Jupyter Notebooks设计的,它可以允许你添加一些东西,并通过调用Tensor.eval()以及Operation.run()来执行,而不需要每次执行session.run()来执行。

 sess = tf.InteractiveSession()
a = tf.constant(1)
b = tf.constant(2)
c = a + b
# instead of sess.run(c)
c.eval()

InteractiveSession 允许你不用显式的传递一个session对象。

变量

在tensorflow中,变量是由运行周期Session管理的。它们存在于session之间,这是非常有用的,因为张量和操作这些对象是不变的。变量的创建过程如下:

 tensorflow_var = tf.Variable(1, name="my_variable")

大多数时候,你希望创建各种0,1或者随机张量。

  • tf.zeros() — 创建全零矩阵
  • tf.ones() — 创建全1矩阵
  • tf.random_normal() — 两个数之间的随机数矩阵
  • tf.random_uniform() — 随机数矩阵
  • tf.truncated_normal() — 和前面类似,但是不包括大于随机方差的数

这些函数可以定义生成的矩阵的尺寸,比如

 # 4x4x4 matrix normally distribued mean 0 std 1
normal = tf.truncated_normal([4, 4, 4], mean=0.0, stddev=1.0)

为了把变量设置成这些矩阵,我们可以

 normal_var = tf.Variable(tf.truncated_normal([4,4,4] , mean=0.0, stddev=1.0)

为了初始化这些变量,需要在session里面,执行初始化操作,这和多个session运行变量是一样的。

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

如果想要完全改变变量的值,你可以调用variable.assign()函数,这个函数也需要在一个session里面执行

 initial_var = tf.Variable(1)
changed_var = initial_var.assign(initial_var + initial_var)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
sess.run(changed_var)
#
sess.run(changed_var)
#
sess.run(changed_var)
#

有时候,你需要对变量添加一些东西,你需要执行variable.assign_add()函数,该函数输入一个数为参数,并把该数添加到变量上。函数variable.assign_sub()类似。

 counter = tf.Variable(0)
sess.run(counter.assign_add(1))
#
sess.run(counter.assign_sub(1))
# -1

作用域

为了控制模型的复杂度并尽可能简单的把模型划分成更小的片段,tensorflow引入了作用域。作用域是个非常见的概念,

 with tf.name_scope("Scope1"):
with tf.name_scope("Scope_nested"):
nested_var = tf.mul(5, 5)

可能这里还不能看到作用域的作用,但是在第二部分学习TensorBoard的时候,我们就会看到它的用途。

小结

这里展示了很多tensorflow的重要组成部分。这些独立的部分组合在一起就可以构建复杂的模型。

[tensorflow in a nutshell] tensorflow简明教程 (第一部分)的更多相关文章

  1. 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)

    小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...

  2. duilib入门简明教程 -- 第一个程序 Hello World(3)

    小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...

  3. duilib入门简明教程 -- 第一个程序 Hello World(3) (转)

    原文转自 http://www.cnblogs.com/Alberl/p/3343579.html 小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个m ...

  4. 2013 duilib入门简明教程 -- 总结 (20)

        duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第个版本,时间是2013.08.15~       这里给出Alberl最后汇总的一个工程,戳我下载,效 ...

  5. DUILIB入门简明教程

      电子书下载: DUILIB入门简明教程.chm 文章作者:  Alberl 电子书制作: 邓学彬 目录: 2013 duilib入门简明教程 -- 前言(1) 2013 duilib入门简明教程 ...

  6. 大数据下基于Tensorflow框架的深度学习示例教程

    近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较 ...

  7. Anaconda、TensorFlow安装和Pycharm配置详细教程,亲测有效!

    目录 1.Anaconda下载与安装 2.Anaconda安装成功与否测试 3.安装python 4.检查TensorFlow环境添加成功与否 5.TensorFlow安装 6.测试TensorFlo ...

  8. [教程]Tensorflow + win10 + CPU + Python3.6+ 安装教程

    由于各种原因,清华镜像源已经彻底挂掉了,但是目前网上的各种教程基本上都是采取设置清华镜像源来加快下载速度,所以这给小白带来了很大的困扰!这里我将通过合理上网工具来直接下载源镜像. 注意:本次教程适用于 ...

  9. duilib教程之duilib入门简明教程3.第一个程序 Hello World

    小伙伴们有点迫不及待了么,来看一看Hello World吧:新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #in ...

随机推荐

  1. eclipse 书签

    虽然eclipse有back to和forward两个功能帮助我们阅读代码,但有时候代码一层一层看下去后,会忘了自己最初的起点. 因此想到了eclipse的书签bookmark功能. 首先,添加书签. ...

  2. 自己利用jQuery实现的win8图标浮动更新

    在学校参加网页设计大赛时,由于美工设计的刚好是metro风格的(其实她们从来没有用过win8也没有了解过),而本人也很喜欢win8的界面,于是就做了一个metro风格的作品.虽然最终没能获奖,但是觉得 ...

  3. js获取节点

    demo1: <!-- <div id="test" v="1">你好</div> --> // console.log(t ...

  4. Windows2003/2008/2008 R2下易语言点支持库配置就退出的问题

    问题: 请问一个问题,我的电脑上win2003系统的,安装了易语言后,一点支持库配置就会自动退出.这是为什么啊? 解决方法如下: 删除 lib下的wmp.npk,重新打开易语言就可以了.

  5. [转载]Log4net学习笔记

    Log4net 学习笔记: 主要是根据apache站点整理的: 原文链接:http://logging.apache.org/log4net/release/sdk/ http://logging.a ...

  6. js检测浏览器版本代码,兼容ie11

    原文:http://blog.csdn.net/tenkin/article/details/11640165 <script type="text/javascript"& ...

  7. Otto开发初探——微服务依赖管理新利器

    [编者按]时下,Vagrant 被 DevOps 软件开发商广泛作为开发阶段的本地软件开发环境,而在本文,CERT Division高级研究员介绍的 Otto 则是 Vagrant 开发团队 Hash ...

  8. Nagios监控部署(转)

    转自 http://kyhack.blog.51cto.com/490370/213355 ky.blog 一.nagios简介        nagios是一款用于系统和网络监控的应用程序,它可以在 ...

  9. POJ 1269 Intersecting Lines(几何)

    题目链接 题意 : 给你两条线段的起点和终点,一共四个点,让你求交点坐标,如果这四个点是共线的,输出“LINE”,如果是平行的就输出“NONE”. 思路 : 照着ZN留下的模板果然好用,直接套上模板了 ...

  10. R语言学习笔记:怎么从txt中读入数据

    1   从该链接中下载测试数据,http://pan.baidu.com/share/link?shareid=3322971616&uk=3862050759   2   把测试文件Anal ...