[tensorflow in a nutshell] tensorflow简明教程 (第一部分)
原文链接: 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简明教程 (第一部分)的更多相关文章
- 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)
小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...
- duilib入门简明教程 -- 第一个程序 Hello World(3)
小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...
- duilib入门简明教程 -- 第一个程序 Hello World(3) (转)
原文转自 http://www.cnblogs.com/Alberl/p/3343579.html 小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个m ...
- 2013 duilib入门简明教程 -- 总结 (20)
duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第个版本,时间是2013.08.15~ 这里给出Alberl最后汇总的一个工程,戳我下载,效 ...
- DUILIB入门简明教程
电子书下载: DUILIB入门简明教程.chm 文章作者: Alberl 电子书制作: 邓学彬 目录: 2013 duilib入门简明教程 -- 前言(1) 2013 duilib入门简明教程 ...
- 大数据下基于Tensorflow框架的深度学习示例教程
近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较 ...
- Anaconda、TensorFlow安装和Pycharm配置详细教程,亲测有效!
目录 1.Anaconda下载与安装 2.Anaconda安装成功与否测试 3.安装python 4.检查TensorFlow环境添加成功与否 5.TensorFlow安装 6.测试TensorFlo ...
- [教程]Tensorflow + win10 + CPU + Python3.6+ 安装教程
由于各种原因,清华镜像源已经彻底挂掉了,但是目前网上的各种教程基本上都是采取设置清华镜像源来加快下载速度,所以这给小白带来了很大的困扰!这里我将通过合理上网工具来直接下载源镜像. 注意:本次教程适用于 ...
- duilib教程之duilib入门简明教程3.第一个程序 Hello World
小伙伴们有点迫不及待了么,来看一看Hello World吧:新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #in ...
随机推荐
- myeclipse报jar包missing
一.问题描述 从版本库中check out项目后,发现项目有“感叹号”,且pom.xml文件有红色的“差号”.如下图: 在error window里可以看到missing jar包的提示,如下: 打开 ...
- 可编辑的select框的实现(实用版)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEA ...
- navicat 导入sql文件乱码问题解决
一,右键数据库链接,点击链接属性,修改以下信息,如图: 选择高级选项页签==>去掉使用MySQL字符集复选框==>选择GB2312字符编码==>点击确定 三,控制台后,show va ...
- Razor视图引擎的基本概念与法语
Razor 视图引擎的特点: 简洁.富于表现.流畅 尽量减少页面代码的输入,实现快速流畅的编程工作 不必明确为服务器代码标记起始与结束符,Razor 能智能判断,这样让页面看清洁,代码方便阅读 asp ...
- ios 应用剖析
在创建HelloWorld的过程中,生成了很多文件(展开Xcode左边的项目导航视图可以看到,如图2-8所示),它们各自的作用是什么?彼此间又是怎样的一种关系呢? 图2-8 项目导航视图 如图2-8所 ...
- strcat与strncat的C/C++实现
2013-07-05 15:47:19 本函数给出了几种strcat与strncat的实现,有ugly implementation,也有good implementation.并参考标准库中的imp ...
- Call to undefined function pg_
网上普遍的解决方案: 1.修改php.ini文件, 添加php_pgsql.dll扩展 2.如果是wamp这样类似的软件,可以直接通过图形化操作 这样操作后,大部分RD都是没有问的...但是为什么还提 ...
- Convert boolean values to strings 'Yes' or 'No'.
Convert boolean values to strings 'Yes' or 'No'. Complete the bool_to_word (Javascript: boolToWord ) ...
- 1613. For Fans of Statistics(STL)
1613 高端的东西 lower_bounder 函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置.如果所有元素都小于val,则返 ...
- bzoj4008
好题,这题可以分开算每个技能的贡献 orz popoqqq http://blog.csdn.net/popoqqq/article/details/45365759 ..,..] of double ...