[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 ...
随机推荐
- 论文阅读(2014-2)----The YouTube Video Recommendation System
这是谷歌youtube在2010的一篇文章,估计现在的思路有很多升级了,但是里面的知识点还是很不错的.主要讲youtube的个性化推荐思路.下面根据论文的结构我把我理解的思路整理如下,如果有问题,欢迎 ...
- The 6th Zhejiang Provincial Collegiate Programming Contest->Problem I:A Stack or A Queue?
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3210 题意:给出stack和queue的定义,一个是先进后出(FILO), ...
- DLL远程注入与卸载
以下提供两个函数,分别用于向其它进程注入和卸载指定DLL模块.支持Unicode编码. #include <windows.h>#include <tchar.h>#inclu ...
- CF 369 B. Valera and Contest
http://codeforces.com/contest/369/problem/B 题意 :n, k, l, r, sall, sk,n代表的是n个人,这n个人的总分是sall,每个人的得分大于 ...
- 1400 - "Ray, Pass me the dishes!"
哈哈,原来题意看错了,但有多个解的时候,输出起点靠前的,如果起点一样,则输出终点靠前的,修改后AC的代码如下: #include <cstdio> #include <iostrea ...
- Spring RestTemplate介绍
http://www.cnblogs.com/rollenholt/p/3894117.html RestTemplate 这篇文章打算介绍一下Spring的RestTemplate.我这边以前设计到 ...
- log file sync
Recently, our application system has updated one app. I receive a email of complain the db server ch ...
- C 可变参数(C与指针实例)
偶尔我们需要设计一些函数,它们的参数数目不是固定的,这样我们需要用到可变参数列表. 可变参数列表是通过宏来实现的,定义于stdarg.h头文件. 具体内容在<C与指针> ; ...
- Oracle命令(一):Oracle登录命令
1.运行SQLPLUS工具 C:\Users\wd-pc>sqlplus 2.直接进入SQLPLUS命令提示符 C:\Users\wd-pc>sqlplus /nolog 3.以OS身份连 ...
- js模仿jquery里的几个方法parent, parentUntil, children
有时工作需要, 也是接着上一章的方法, 用js模仿jquery里的几个方法parent, parentUntil, children. function parent(node){ return no ...