Tensorflow的運行方式
Tensorflow作爲谷歌開源的深度學習框架,受到衆多的人工智能開發人員歡迎。Tensorflow的數據控制單元,張量Tensor是一個可以定義爲任意維度的數據,張量的階Tensor’s rank就是張量的維度,例如:
零階張量: 1 一個標量
一階張量: [1,2,3] 一個向量 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的大規模數據集導入