1. TensorFlow运行模型—会话
Session会话拥有并管理TensorFlow程序运行时的所有资源,当所有计算完成之后需要关闭会话帮助系统回收资源。
1. 会话模式1
sess=tf.Session()#创建会话 sess.run()#启动会话 sess.close()#关闭会话,释放资源 sess=tf.Session() try: sess.run() except: Print(“Exception”) finally: sess.close()
1. 指定默认的会话
sess=tf.Session()#创建会话 with sess as_default(): print(result.eval())
1. 交互环境下设置默认会话
tf.InteractiveSession使用这个函数会自动将生成的会话注册为默认会话 sess=tf.InteractiveSession() print(result.eval()) sess.close()
常量与变量
常量constant
在运行过程中值不会改变的单元,在TensorFlow中无需进行初始化操作
创建语句:consrtant_name=tf.constant(value)
变量Variable
在运行过程中值会改变的单元,在TensorFlow中需进行初始化操作
Variable_name=tf.Variable(value,name)#V是大写
个别变量初始化:
init_op=name_variable.initializer()
sess.run(init_op)
所有变量初始化:
init_op=tf.global_variables_initializer()
sess.run(init_op)
变量赋值
TensorFlow中的变量定义后,一般无需人工赋值,系统会根据算法模型,训练优化过程中自动调整变量对应的数值。特殊情况下需要人工更新,可用变量赋值语句,变量更新语句:
update_op=tf.assign(variable_to_be_update,new_value)
import tensorflow as tf#导入tensorflow模型 tf.reset_default_graph()#清楚默认图和不断增加的节点 #通过变量赋值输出1.2.3.……10 value=tf.Variable(0,name="value") one=tf.constant(1) new_value=tf.add(value,one) update_value=tf.assign(value,new_value) init=tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) for _ in range(10): sess.run(update_value) print(sess.run(value)) logdir='D:/pycharm project/logs' #生成一个写日志的writer,并将当前的tensorflow计算图写入日志 writer=tf.summary.FileWriter(logdir,tf.get_default_graph()) writer.close()
思考:如何利用tensorflow变量赋值计算1+2+3……+10?
import tensorflow as tf#导入tensorflow模型 tf.reset_default_graph()#清楚默认图和不断增加的节点 #通过变量赋值输出1+2+3+……10 value=tf.Variable(0,name="value") sums=tf.Variable(0,name="sums") one=tf.constant(1) new_value=tf.add(value,one) update_value = tf.assign(value, new_value) new_sum = tf.add(sums,value) update_sum = tf.assign(sums,new_sum) init=tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) for _ in range(10): sess.run(update_value) sess.run(update_sum) print(sess.run(sums)) logdir='D:/pycharm project/logs' #生成一个写日志的writer,并将当前的tensorflow计算图写入日志 writer=tf.summary.FileWriter(logdir,tf.get_default_graph()) writer.close()
占位符placeholder
TensorFlow中的Variable变量类型,在定义时需要初始化,但有些变量定义时并不知道其数值,只有当真正开始运行程序时,才有外部输入,比如训练数据时,这个时候需要占位符。tf.placeholder占位符,是tensorflow中特有的一种数据结构,类似动态变量,函数的参数,或者c语言或者python语言中格式化输出时的“%”占位符。
tf.placeholder(dtype,shape=None,name=None)
x=tf.placeholder(tf.float32,[2,3],name=”x”)
Feed提交数据
如果构建了一个包含placeholder操作的计算图,当在session中调用run方法时,placeholder占用的变量必须通过feed_dict参数传递进去,否则报错。
import tensorflow as tf a=tf.placeholder(tf.float32,name="a") b=tf.placeholder(tf.float32,name="b") c=tf.multiply(a,b,name="c") init=tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) #通过feed_dict的参数传值,按字典格式 result=sess.run(c,feed_dict={a:8.0,b:3.5}) print(result)
多个操作可以通过一次feed完成执行。
import tensorflow as tf a=tf.placeholder(tf.float32,name="a") b=tf.placeholder(tf.float32,name="b") c=tf.multiply(a,b,name="c") d=tf.multiply(a,b,name="d") init=tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) #通过feed_dict的参数传值,按字典格式 result=sess.run([c,d],feed_dict={a:[8.0,2.0,3.5],b:[1.5,2.0,4.0]}) print(result) #取结果中第一个 print(result[0])
1. feed和fetch
一次返回多个值分别赋给多个变量
import tensorflow as tf a=tf.placeholder(tf.float32,name="a") b=tf.placeholder(tf.float32,name="b") c=tf.multiply(a,b,name="c") d=tf.multiply(a,b,name="d") init=tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) #通过feed_dict的参数传值,按字典格式 rc,rd=sess.run([c,d],feed_dict={a:[8.0,2.0,3.5],b:[1.5,2.0,4.0]}) print("c=",rc,"d=",rd)