一、定义

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')

得到的文件有:

tensorflow构建datasets_python

十五、模型的恢复(利用定义的变量)

变量的名称和形状必须定义正确,通过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)

 

常用函数