tensorflow(一)基礎

 一、定義

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

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章