一、定義
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
https://blog.csdn.net/xierhacker/article/details/53174558
常用的:
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)使用以下語句
writer=tf.train.SummaryWriter(logdir="./log",graph=self.graph)
運行程序後將生成一個事件文件夾log,和一個事件文件log/events.out******
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.import_tensor_by_name(name='xxx')
參考鏈接:
https://blog.csdn.net/xierhacker/article/details/53102355
https://blog.csdn.net/xierhacker/article/details/53103979
https://blog.csdn.net/xierhacker/article/details/53860379
https://blog.csdn.net/xierhacker/article/details/58637829