DeepLearning | Tensorflow編程基礎:Session、Constant、Variable、Tensor、Placeholder、OP

Tensorflow的運行方式

Tensorflow作爲谷歌開源的深度學習框架,受到衆多的人工智能開發人員歡迎。Tensorflow的數據控制單元,張量Tensor是一個可以定義爲任意維度的數據,張量的階Tensor’s rank就是張量的維度,例如:

零階張量: 1   一個標量
一階張量: [123]    一個向量 shape 3
二階張量: [[1,2,3],[4,5,6]]   一個矩陣 shape 2x3
三階張量: [[[1,2,3]],[[4,5,6]]]   shape:2x1x3

Tensorflow的編程主要分爲兩步,第一步構造計算圖(computational Graph),第二步運行計算圖。那麼計算圖是什麼呢?
計算圖是一系列由計算操作抽象出來的節點構成的結構,張量(Tensor)在這些節點之間流動運行,由此稱該框架爲Tensorflow。接下來我們就來介紹一下Tensorflow的基本概念

Constant常量

要使用Tensorflow我們首先需要導入該框架

import tensorflow as tf 

Tensorflow中一個基礎的節點類型就是constant,常量節點

node_A = tf.constant(10,tf.float32)
node_B = tf.constant(11,tf.int32)

所有的常量類型在定義時,就已經賦予了數值,而且其數值在後面的運行中是無法改變的。

Session會話

如果我們直接輸出上面定義的兩個節點時,例如

print(node_A,node_B)

我們會得到下面的結果

Tensor("Const:0", shape=(), dtype=float32) 
Tensor("Const_1:0", shape=(), dtype=float32)

這裏輸出的並不是我們想要的10和11,想要輸出運行一個節點的結果,必須在一個會話Session中運行計算圖,Tensor flow中的session很好的封裝了其運行時的狀態和控制,接下來我們定義一個會話,輸出兩個節點的值

sess = tf.Session()
a,b = sess.run([node_A,node_B])
print(a,b)

輸出如下:

10.0 11.0

Op計算節點

上面我們定義了兩個常量節點和會話,並輸出了節點的值,我們可以通過定義一些計算操作(Operation、Op)節點,構建更加複雜的計算
加法:

node_C = tf.add(node_A,node_B)
print(sess.run(node_C)) 

輸出爲

21.0

乘法:

node_D = tf.multiply(node_A,node_B)
print(sess.run(node_D)) 

輸出爲

110.0

Placehoder佔位符

上面我們已經熟悉了常量類型以及一些運輸符號的操作,Tensorflow的計算圖還可以使用佔位符placeholder參數化的從外部輸入數據,簡單來說placehold的作用就是給之後輸入的值提前佔位,設置這個結構的存在。

# 這裏是構造計算圖的部分
a=tf.placeholder(tf.float32)  
b=tf.placeholder(tf.float32)  
adder_node=a+b  
#運行計算圖  
print("adder_node:",adder_node)  
print(sess.run(adder_node,{a:3,b:4.5}))  
print(sess.run(adder_node,{a:[1,3],b:[2,4]}))  

輸出結果爲:

adder_node: Tensor("add:0", dtype=float32)
7.5
[ 3.  7.]

在我們構建一個神經網絡時,通常會爲網絡的輸入輸出構建一個placeholder佔位符

Variable變量

在網絡模型中,我們不光有常量類型,計算操作、輸入輸出佔位符等更多的是大量的變量類型,模型具有可訓練能力,需要在一次次訓練中修正計算圖,使對於同樣的輸入得到新的輸出。變量variable允許我們爲計算圖添加可變的訓練參數
例如,我們構造一個線性模型

定義圖結構
W=tf.Variable([.3],tf.float32)  
b=tf.Variable([-.3],tf.float32)  
x=tf.placeholder(tf.float32)  
linear_model=W*x+b  
運行計算圖
init = tf.global_variables_initializer()  
sess.run(init)  
print(sess.run(linear_model,{x:[1,2,3,4]}))  

這裏的初始化是必要的,與常量類型的定義不同,所有的變量類型在定義時都不會賦予初始值,只有在執行初始化操作時,值纔會被賦予變量
上述代碼的輸出爲:

[ 0.          0.30000001  0.60000002  0.90000004]

到這裏我們就講完了tensorflow的一些基本概念,想要熟練掌握,還需要使用這些基礎工具慢慢搭建出自己的網絡,我的另一篇博客中描述瞭如何將一個大規模的數據集導入tensorflow
DeepLearning | Batch Generator:Tensorflow的大規模數據集導入

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