#tensorflow图操作
1、graph = tf.get_default_graph()获取默认图,返回图所在的内存空间
2、new_graph = tf.Graph() 创建新图
with new_graph.as_default(): #使用上下文环境
c = tf.constant(11.0)
3、一张图包含了一组op和tensor
op:只要使用tf的API定义的函数接口都是op
tensor:就是指代数据,有的op内部装有tensor
#tensorflow前端系统与后端系统
前端系统:定义图的结构
后端系统:会话:运行图的结构,分配cpu与gpu资源,掌控资源(TF变量生命周期、队列、线程)
#session.run()
用session.run()启动一个图的运行,用sess.close()释放内存
使用上下文管理器运行会话,结束后自动调用sess.close()释放资源
with tf.Session() as sess:
sess.run()
sess内的参数congif = tf.ConfigProto(log_device_placement = True)
#变量的eval函数
有了上下文函数,就可以使用a.eval()来run出a的值
#会话的run函数
run([])如果需要计算多个op,需要用列表传入
不能运行非op,如python自带的int
可以用int + op,比如a = 3,b = tf.constant(2)+a,则b是op
#feed_dict
可以给变量赋不同的值给placeholder,用于实时提供数据进行训练
#placeholder(一种op)
placeholder(dtype,shape = None,name = None)
比如
a = tf. placeholder(float32,[2,3])
with tf.Session() as sess:
sess.run(a,feed_dict = {a:[[1,2,3],[4,5,6]]})
行数不确定,用None代替,传入时可以传入多组数量不定的数据
#张量的阶
一个类型化的数据格式tf.Tensor()
张量存在于一个op中,有三个重要参数
Tensor("op_name:0",shape,dtype)
#数据类型dtype
tf.float32 float64 #float64其实会被转化成float32,并没有实际意义
tf.int64 int32 int16 int8 uint8 #一般用int32
tf.string 长度可变的字符数组
#张量的属性
graph
op
name
shape
#shape讲解
维数 打印结果
0 ()
1 (5)
2 (5,7)
3 (?,3,4)
... ...
打印问好则未固定
#shape的动态修改和静态修改
静态修改
tf.Tensor.get_shape()获取形状
tf.Tensor.set_shape()静态设置形状
对于静态形状而言,一旦形状确定(没有None)则不能再改变,且维度也不能修改
动态修改
tf.reshape()
元素总量不能改变,否则多余的数据和少的数据无法处理或补全
对于元素数量未定的张量,可以将之更改为任意类型的张量
#张量操作->生成张量
tf.zeros(shape,dtype,name=None)
tf.ones(shape,dype,name=None)
创建随机值张量
tf.random_normal(shape,mean,stddev=1.0,dtype=tf.float32,seed=None,name=None)
#张量数据类型转换
tf.cast(src,dtype,name=None)
#张量合并
tf.concat((value1,value2...),axis = 0)
#axis代表用行还是列拼接
#变量tf.Variable()
也是一种op,是一种特殊的张量,默认能够被训练
#变量的创建
tf.Varibale(initial_value = None,name=None,trainable = True)
#变量的初始化
init_op = tf.global_variables_initializer()
sess.run(init_op)
#可视化tensorboard
tf.summery.FileWriter('path',graph=x) #x可以是get_default_graph得到的,也可以是一个图中变量a.graph得到的;path是路径名,不是文件名,文件名由程序决定
然后命令行下输入
tensorboard --logdir="C:\Users\xie\event"
路径下如果有多个文件,默认取最新的文件
op节点都有name参数,用于设置在tensorboard中显示的名字