目录
tensorflow 基本使用
1. 使用图(graph)来表示计算任务 2. 在被称之为会话(Session)的上下文(context)中执行图 3. 使用tensor表示数据 4. 通过变量(Variable)维护状态 5. 使用Feed和fetch可以为任意的操作(arbitrary operation)赋值或者从其中获取数据
综述:tensorflow是一个编程系统,使用图来表示计算任务。图中的节点称之为op(operation)。一个op获得0个或者多个tensor,执行计算,产生0个或者多个tensor,每个tensor是一个类型化的多维数组。可以将一个小组的图像表示为四维浮点数数组[batch,height,width,channels].
图描述了计算的过程,为了进行计算,图必须在绘画里面启动个,会话将图的op分发到cpu or GPU设备上面进行计算,同时提供执行op的方法。 这些方法执行后,将产生的tensor返回。python中返回的tensor是numpy ndarray的对象;
计算图:程序 被组织为 构建阶段 和 执行阶段。构建阶段:op的执行步骤描述为一个图;执行阶段:使用会话执行图中的op。 如:通常在构建阶段创建一个图来表示和训练神经网络,而在执行阶段反复执行图中的训练op。
tensorflow支持C,C++,Python编程语言。目前python库更加易用,提供了大量的辅助函数简化构建图的工作,这些函数还没有被C,C++库支持
3种语言的会话库(session libraries)一致的 构建图:第一步,创建源op(source op),不需要任何输入,例如常量(Constant),源op的输出被传递给其他op做运算 第二步:其他op以上一步op的返回值/输出值 作为输入 python库里面有一个默认图,op构造器可以为其增加节点,这个默认图对很多程序来讲已经够用,阅读graph类文档,了解如何管理多个图
在一个会话中启动图:构造阶段完成后,才能启动图。第一个步骤,创建一个Session对象,如果没有任何创建参数,会话构造器将启动默认图。
'启动默认图'sess=tf.Session() ''' 调用sess的run()方法执行矩阵乘法op,传入‘product’作为该方法的的参数 product 代表了 矩阵乘法op的输出,传入‘product’是 向方法表明,希望取出矩阵乘法op的输出
整个执行过程全自动化,会话负责传递op需要的所有输入,op通常是并发执行 函数调用 run(product) 出发了图中的3个op (两个常量op,一个矩阵乘法op)的执行
返回值 ‘result’ 是一个numpy ndarray对象 ''' result=sess.run(product) print(result) '任务完成,关闭会话'sess.close() #%% 'Session对象在使用完成后需要关闭 以释放资源。 输了显式调用close以外,还可以使用with模块代码自动完成关闭动作'
实现上,tensorflow将图形定义转换为分布式执行的操作,充分利用CPU or GPU计算资源,一般不需用显式指定CPU或者GPU,tensorflow可以自动检测,如果检测到GPU,tensorflow会尽可能利用找到的第一个GPU来执行操作。 如果有多个GPU,默认只有第一个GPU在工作,其他GPU默认都不工作, 如果要让其他GPU工作,必须要将op明确指派给他们执行, …with ..Device …语句来指派特定的CPU或者GPU
设备用字符串进行标识,目前支持的设备包括: “/cpu:0” “/gpu:0” “/gpu:1”
交互使用:为了便于使用ipython之类的交互环境,可以使用InterativeSession 代替Session类,使用Tensor.eval() 和 Operation.run() 方法来替代 Session.run(),这样可以避免使用一个变量维持会话。
Tensor:tensorflow 程序使用tensor数据结构来代表所有数据,计算图中,操作间的传递数据都是tensor,你可以把tensorflow看作一个n维的数组或者列表,一个tensor包含一个静态类型rank,一个shape,要了解这些参见Rank,shape,Type。
变量:variables。 变量 维护图执行过程中的状态信息。下面的例子演示了如何通过使用变量来实现一个简单的计数器。参见变量章节了解更多细节。
Fetch
为了取回操作的输出内容, 可以在使用
需要获取的多个 tensor 值,在 op 的一次运行中一起获得(而不是逐个去获取 tensor)。
Feed上述示例在计算图中引入了 tensor, 以常量或变量的形式存储. TensorFlow 还提供了 feed 机制, 该机制 可以临时替代图中的任意操作中的 tensor 可以对图中任何操作提交补丁, 直接插入一个 tensor. feed 使用一个 tensor 值临时替换一个操作的输出结果. 你可以提供 feed 数据作为
input1=tf.placeholder(tf.float32) input2=tf.placeholder(tf.float32) output=tf.multiply(input1,input2) with tf.Session() as sess: print(sess.run([output],feed_dict={input1:[7.0],input2:[2.0]})) # 输出: # [array([ 14.], dtype=float32)] for a larger-scale example of feeds. 如果没有正确提供 feed,
| ||||||