TensorFlow 中的张量,图,会话
2017-10-21 20:41
232 查看
tensor的含义是张量,张量是什么,听起来很高深的样子,其实我们对于张量一点都不陌生,因为像标量,向量,矩阵这些都可以被认为是特殊的张量。如下图所示:
在TensorFlow中,tensor实际上就是各种“数”的统称。而flow是流动的意思。所以TensorFlow的意思就是“数”的流动,可以说TensorFlow这个名字很形象。一般来说,编程模式有两种,一种是命令式的,一种是符号式的。命令式便于理解和调试,而符号式便于对复杂代码进行封装和抽象(就想我们把一些操作封装成函数,每次调用根据不同的输入值来得到返回值)。TensorFlow是一个符号主义的库,在TensorFlow内部,需要先定义各种变量,然后建立一个计算图(计算流图),计算图指定了各个变量之间的计算关系。计算图就像工厂里的流水线,流水线决定了每一道工序是如何对原料进行加工的。TensorFlow中的原料就是计算图输入的数据,只有输入了数据,形成了数据流(tensor开始flow了),才能形成输出。
在TensorFlow中,tensor实际上就是各种“数”的统称。而flow是流动的意思。所以TensorFlow的意思就是“数”的流动,可以说TensorFlow这个名字很形象。一般来说,编程模式有两种,一种是命令式的,一种是符号式的。命令式便于理解和调试,而符号式便于对复杂代码进行封装和抽象(就想我们把一些操作封装成函数,每次调用根据不同的输入值来得到返回值)。TensorFlow是一个符号主义的库,在TensorFlow内部,需要先定义各种变量,然后建立一个计算图(计算流图),计算图指定了各个变量之间的计算关系。计算图就像工厂里的流水线,流水线决定了每一道工序是如何对原料进行加工的。TensorFlow中的原料就是计算图输入的数据,只有输入了数据,形成了数据流(tensor开始flow了),才能形成输出。
张量
import tensorflow as tf """ TensorFlow中的张量有三个属性:name,shape,dtype 1.name第一个属性是张量的一个标识符name=’参数为字符串类型’,如果没有指定,会根据张量是通过什么操作(运算)自动添加,后面的0表示张量d是计算节点add的第一个输出. 2.shape,描述张量的维度信息 3.dtype,张量的类型,如果在创建节点时没有指定dtype,没有小数点默认tf.int32,有小数点默认tf.float32.tensorflow会对参与计算张量的类型进行检查,不匹配会报错 """ #张量的属性 result = tf.add(1,2) print(result) # Tensor("Add:0", shape=(), dtype=int32) result2 = tf.add(2,3,name='result2') print(result2) # Tensor("result2:0", shape=(), dtype=int32) result3 = tf.add(3,4,name='result2') print(result3) # Tensor("result2_1:0", shape=(), dtype=int32) # 创建图 a = tf.constant(1, name='input_a') b = tf.constant(2, name='input_b',dtype=tf.int8) f = tf.add(a,b, name='add_ab') #每一个节点(上面的a,b,f)都是一个Op(Operation),每个Op可以接受或输出多个或0个tensor对象,如tf.constant()创建一个常量Op, #TensorFlow可接收Python数值、布尔值、字符串、数组。单个数值转化为0阶张量(标量)。数值列表转化为1阶张量(向量)。由列表构成的列表转化为2阶张量(矩阵)。 #TensorFlow数据类型基于NumPy。任何NumPy数组都可以传递给TensorFlow Op。使用时指定所需数据类型比不指定的代价小。 #TensorFlow返回的张量都是NumPy数组
图和会话
""" 计算图(graph):只定义计算过程和数据(tensor)的操作方式,计算图中并不保存任何数据。 会话(session):会话分配计算资源(一台或者多台的机器)去执行计算图或计算图中的一部分运算操作。当前的变量和结果保存在会话中。 """ #定义一个会话 graph = tf.Graph() with graph.as_default(): var = tf.Variable(initial_value=1,name='var1') initialize = tf.global_variables_initializer() assign = var.assign(value=33) #如果创建Op前,没有显式的创建计算图,TensorFlow将会在接下来的会话中使用使用默认的计算图 #在会话中运行计算图中定义的计算过程 """ 在TensorFlow中计算图的任何操作都需要在为计算图创建的会话中来运行。会话(session)会给相关的变量分配内存 """ with tf.Session(graph=graph) as sess: sess.run(initialize) sess.run(assign) print(sess.run(var)) # Output: 13 #变量只在一个session中有效,比如下面的代码会提示变量没有初始化。 with tf.Session(graph=graph) as sess2: print(sess2.run(var)) # Error: Attempting to use uninitialized value var1 #当然,也可以在多个会话session中使用同一个计算图,但是每个会话中的变量是独立的,就像在多个车间中使用同样规格的生产线。 # 变量的保存和恢复 import tensorflow as tf import numpy as np #保存的目录 save_file = './ckpt/mymodel' #创建用来处理保存操作的类 graph = tf.Graph() with graph.as_default(): x = tf.placeholder(dtype=tf.float32,shape=[None,2]) y = tf.placeholder(dtype=tf.float32,shape=[None,2]) w = tf.Variable(initial_value=np.random.rand(1,2),dtype=tf.float32) b = tf.Variable(initial_value=[1.0,1.0],dtype=tf.float32) y_pred = x * w + b loss=tf.reduce_mean(tf.square(y_pred-y)) optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1) train = optimizer.minimize(loss) saver = tf.train.Saver() initialize = tf.global_variables_initializer() x_data = np.random.rand(1000,2) with tf.Session(graph = graph)as sess: sess.run(initialize) _, tmp_loss = sess.run([train, loss], feed_dict={x: x_data, y: x_data * [[2, 2]]}) print('loss:',tmp_loss) for i in range(5000): _,tmp_loss=sess.run([train,loss],feed_dict={x:x_data,y:x_data*[[2,2]]}) _, tmp_loss = sess.run([train, loss], feed_dict={x: x_data, y: x_data * [[2, 2]]}) print('loss:',tmp_loss) print('w:',sess.run(w)) saver.save(sess,save_path=save_file) with tf.Session(graph = graph) as sess_restore: saver.restore(sess_restore,save_file) print('w:',sess_restore.run(w)) """ 注意:tf.train.Saver()需要在你想要保存的变量的定义后在创建,并且要求和这些变量在同一个计算图中,否则将会导致TensorFlow的ValueError: No variables to save 错误。 """
相关文章推荐
- tensorflow的会话(Session)、变量的初始化、张量的计算
- tensorflow基础(三)——张量和会话
- TensorFlow计算图,张量,会话基础知识
- TensorFlow的张量与会话
- tensorflow入门:计算图、张量和会话
- 《TensorFlow-实战Google深度学习框架》学习笔记 计算图、张量、会话
- [Tensorflow] tensor张量基础(dtype,shape,variable,slice and join)
- TensorFlow基础知识:计算图中的Op,边,和张量
- 3、TensorFlow 的数据模型-----张量(Tensor)
- Tensorflow变量与张量
- Tensorflow入门教程五—会话
- TensorFlow学习笔记 补充2—— 生成特殊张量
- TensorFlow中的张量是什么
- TensorFlow数据模型——张量
- Tensorflow学习:Session会话控制
- tensorflow6 会话控制 session
- tensorflow计算图和张量的使用
- TensorFlow基础:Session(会话)
- Tensorflow之会话机制
- Tensorflow中与张量形状有关的操作