一、定义
session:在会话中启动计算过程,将节点分发到cpu或gou中执行,返回tensor
graph:表示计算任务
operation:节点op
tensor:节点的输入或输出都叫tensor,没有run的话tensor就只是一个tensor,是不能输出什么的
二、过程
构建阶段:用op来描述一个graph,比如说表示一个神经网络
执行阶段:使用session执行op,比如说训练过程
三、举个栗子
#搭建环境
from __future__ import print_function,division
import tensorflow as tf
#define the graph
#构建
info_op=tf.constant("hello,world")
a=tf.constant(10)
b=tf.constant(20)
add_op=tf.add(a,b)
#run graph in session
#执行
with tf.Session() as session:
print(session.run(info_op))
print(session.run(add_op))
四、初始化
常量constant:
a=tf.constant([[1,2],[3,4]])
变量Variable:
a=tf.Variable(initial_value=[[1,2],[3,4]],dtype=tf.float32)
随机正态分布:
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
随机截尾正态分布:
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
随机均匀分布:
tf.random_uniform(shape, minval=0, maxval=None, dtype=tf.float32, seed=None, name=None)
"在第一个维度随机打乱顺序,这个功能其实可以用来在随机梯度下降的时候用":
tf.random_shuffle(value, seed=None, name=None)
五、基本操作
tf.matmul(a,b)矩阵相乘
tf.add()
tf.assign(a,b)#给a赋b的值
tf.Session()#with tf.Session() as sess: #sess.close()
tf.sigmoid()
tf.global_variables_initializer()#全局变量初始化也需要run的
tf.placeholder(tf.float32,shape=(12,14),name='dfs')#name和shape都是可有可无的
六、执行的几种方法
1)
sess=tf.Session()
sess.run(a)
2)
a.eval(session=sess)
#eval评估,其实也是计算
3)
tf.get_default_session().run(a)
七、fetches与feeds
1)fetches
就是在执行的时候传入tensor,可以传入一个tensor,也可以传入几个tensor
sess.run(out)
sess.run([out1,out2])
2)feeds
一般和占位符tf.placeholder一起配套使用
先构建的时候来个a=tf.placeholder(tf.float32),执行的时候用feed_dict传入session.run(out,feed_dict={a:[2.]})
八、graph
一个py文件可以有多个graph,1)使用g=tf.Graph() 创建一张图,2)使用with g.as_default():或者 with tf.Graph().as_default() as g: 在with中将某个graph作为默认图,并在with下对该图操作。举个例子
import tensorflow as tf
c=tf.constant(value=1)
print(c.graph)
print(tf.get_default_graph())
g=tf.Graph()
print("g:",g)
with g.as_default():
d=tf.constant(value=2)
print(d.graph)
g2=tf.Graph()
print("g2:",g2)
g2.as_default()
e=tf.constant(value=15)
print(e.graph)
运行结果:
<tensorflow.python.framework.ops.Graph object at 0x0000000002688CC0>
<tensorflow.python.framework.ops.Graph object at 0x0000000002688CC0>
g: <tensorflow.python.framework.ops.Graph object at 0x000000000268E278>
<tensorflow.python.framework.ops.Graph object at 0x000000000268E278>
g2: <tensorflow.python.framework.ops.Graph object at 0x0000000007A4D080>
<tensorflow.python.framework.ops.Graph object at 0x0000000002688CC0>
共创建了三张图:默认图,g图,g2图。在g图内进行d操作,不用with就没在g2图中进行操作,而是在默认图中进行了操作
九、session
与graph一样,session也可以设置为default,然后就可以在with里面直接run/eval 啦
with sess.as_default():
print(c.eval())
十、优化器optimizer
常用的:
tf.train.GradientDescentOptimizer(a).minimize(loss) #a一般取0.01
十一、tf与numpy
除上面的随机数外,还有一些例子可以看出来,tf同样能做一些数据的处理工作,与numpy对应操作.
与形状有关 shape reshape size rank操作
数据粗略处理大多带reduce ,如reduce_sum/min/max
十二、命名空间
with tf.name_scope("fc2"):
十三、tensorboard可视化
1)使用以下语句
tf.summary.FileWriter('./log',tf.get_default_graph())
不要使用以下老方法
writer=tf.train.SummaryWriter(logdir="./log",graph=self.graph)
运行程序后将生成一个事件文件夹log,和一个事件文件log/events.out******
命名空间:
with tf.name_scope('layer_2'):
2)在cmd里当前目录下运行
tensorboard --logdir log/
3)在浏览器中打开得到的网址
十四、模型的保存
import numpy as np
grapg=tf.Graph
saver=tf.train.Saver()
with graph.as_default():
#此处定义一堆变量
with tf.Session(graph=graph) as sess:
#各种run操作
saver.save(sess=sess,save_path='./model.ckpt')
得到的文件有:
十五、模型的恢复(利用定义的变量)
变量的名称和形状必须定义正确,通过restore的方式加载进数据,不初始化直接run能够利用name得到保存的数据
import tensorflow as tf
graph=tf.Graph()
saver=tf.train.Saver()
with graph.as_default():
a=tf.Variables(initial_value=XXX,dtype=tf.float32,name='u')
with tf.Session(graph=graph) as sess:
#注意不要对a进行初始化,这里不需要initial_value的具体值,只要形状
saver.restore(sess,path)
sess.run(a)
十六、模型的恢复(利用图meta进行加载)
import tensorflow as tf
saver=tf.train.import_meta_graph(meta_graph_or_file='./model.ckpt.meta')
with tf.Session as sess:
saver.restore(sess,save_path='./model.ckpt')
graph=tf.get_default_graph()
tensor_a=graph.get_tensor_by_name(name='xxx')
十七、模型的恢复(利用checkpoint查看含有的变量)
详见:
十八、dropout
tf.nn.dropout(fc7,keep_prob,name="fc7_drop")
十九、常用损失
loss=tf.square(Y-X*w-b)
常用函数