【AI實戰】快速掌握Tensorflow(一):基本操作 原

Tensorflow是Google開源的深度學習框架,來自於Google Brain研究項目,在Google第一代分佈式機器學習框架DistBelief的基礎上發展起來。Tensorflow於2015年11月在GitHub上開源,在2016年4月補充了分佈式版本,最新版本爲1.10,2018年下半年將發佈Tensorflow 2.0預覽版。Tensorflow目前仍處於快速開發迭代中,不斷推出新功能和優化性能,現已成爲當今世界上最受歡迎的開源機器學習框架,是學習研究AI的必備神器。

接下來,將推出“快速掌握Tensorflow”的系列文章,帶你快速入門掌握Tensorflow。

1、Tensorflow是什麼?
Tensorflow是當前最流行的深度學習框架,它既是一個實現深度學習算法的接口,也是執行深度學習算法的框架。Tensorflow前端支持Python、C++、Java、Go等語言,後端使用C++、CUDA等寫成,可在衆多系統上運行,包括Windows、Mac、Linux、Android、IOS等。
Tensorflow的官方網址爲  http://www.tensorflow.org
Tensorflow的GitHub網址爲 https://github.com/tensorflow/tensorflow

2、Tensorflow有什麼特點?
Tensorflow最主要的特點是使用數據流圖(data flow graphs)進行數值計算,由節點(Nodes)和邊(Edges)組成,其中,節點(Nodes)表示數據操作,邊(Edges)表示節點間相互通信的多維數組,這種在邊與邊之間流動(flow)的數據也被稱爲張量(tensor),故而得名Tensorflow。如下圖所示:
Tensors Flowing

【注意】在深度學習裏面,數據流圖都是自下往上的,逐層遞進,而平常普通流程圖大多是自上往下呈現,剛開始看數據流圖會可能有些不太習慣

Tensorflow不是一個嚴格的“神經網絡”庫,不只是用於深度學習,只要能將計算模型表示爲數據流圖形式,就可以使用Tensorflow進行計算。

3、安裝Tensorflow
在【AI實戰】系列文章中,已經介紹過了AI基礎環境搭建:Ubuntu + Anaconda + Tensorflow + GPU + PyCharm,在此就不再贅述。詳見文章:AI基礎環境搭建
本系列文章的代碼均基於Python 3.6和Tensorflow 1.10。

4、Hello World
程序員從“Hello World”開始。在安裝好Tensorflow之後,寫個Hello World試試安裝是否成功。代碼如下:

import tensorflow as tf
hello=tf.constant(‘Hello, TensorFlow!’)
sess=tf.Session()
print(sess.run(hello))

如果成功輸出“Hello,TensorFlow!”,則表明TensorFlow安裝成功。

從這個Hello World代碼可以看出,
(1)要使用tensorflow,先要導入tensorflow庫,使用import tensorflow導入,一般會簡寫爲tf
(2)要執行tensorflow,先要創建Session(會話)。Session是用戶使用tensorflow時的交互接口,用以創建計算圖,然後通過Session的run方法執行計算圖。

5、學會基本操作
TensorFlow的數據流圖由節點(Nodes)和邊(Edges)組成,下面從節點(操作)和邊(張量)來介紹TensorFlow的基本操作。
(1)張量
張量是TensorFlow的主要數據結構,用於操作計算圖。
一個張量(Tensor)可以簡單地理解爲任意維的數組,張量的秩表示其維度數量。張量的秩不同,名稱也不相同。
a、標量:維度爲0的Tensor,也就是一個實數
b、向量:維度爲1的Tensor
c、矩陣:維度爲2的Tensor
d、張量:維度達到及超過3的Tensor

創建張量有以下主要4種方法:
a、創建固定張量
創建常數張量:
constant_ts=tf.constant([1,2,3,4,5])


創建零張量:
zero_ts=tf.zeros([row_dim, col_dim])


創建單位張量:
ones_ts=tf.ones([row_dim,col_dim])


創建張量,並用常數填充:
filled_ts=tf.fill([row_dim,col_dim],123)

b、創建相似形狀張量
創建相似的零張量:
zeros_like=tf.zeros_like(constant_ts)


創建相似的單位張量:
ones_like=tf.ones_like(constant_ts)

c、創建序列張量
指定起止範圍
linear_ts=tf.linspace(start=0, stop=2, num=6)
結果返回[0.0,0.4,0.8,1.2,1.6,2.0],注意該結果包括stop值


指定增量
seq_ts=tf.range(start=4, limit=16, delta=4)
結果返回[4,8,12],注意該結果不包括stop值

d、隨機張量
生成均勻分佈的隨機數
randunif_ts=tf.random_uniform([row_dim,col_dim],minval=0,maxval=1)
結果返回從minval(包含)到maxval(不包含)的均勻分佈的隨機數


生成正態分佈的隨機數
randnorm_ts=tf.random_normal([row_dim,col_dim],mean=0.0,stddev=1.0)
其中mean表示平均值,stddev表示標準差

(2)佔位符和變量
佔位符和變量是使用TensorFlow計算圖的關鍵工具,兩者是有區別的
a、變量:是TensorFlow算法中的參數,通過調整這些變量的狀態來優化模型算法;
b、佔位符:是TensorFlow對象,用於表示輸入輸出數據的格式,允許傳入指定類型和形狀的數據。

創建變量
通過tf.Variable()函數封裝張量來創建變量,例如:
my_var=tf.Variable(tf.zeros([row_dim,col_dim]))

【注意】聲明變量後需要進行初始化才能使用,最常使用以下函數一次性初始化所有變量,使用方式如下:
init_op=tf.global_variables_initializer()

創建佔位符
佔位符僅僅是聲明數據位置,也即先佔個位,後面在會話中通過feed_dict傳入具體的數據。示例代碼如下:

a=tf.placeholder(tf.float32,shape=[1,2])
b=tf.placeholder(tf.float32,shape=[1,2])
adder_node=a+b   #這裏的“+”是tf.add(a,b)的簡潔表達
print(sess.run(adder_node,feed_dict={a:[2,4],b:[5.2,8]}))

輸出結果爲[7.2 12]

(3)操作
TensorFlow張量的加、減、乘、除、取模的基本操作是:add()、sub()、mul()、div()、mod()。例如:

a=tf.placeholder(tf.float32,shape=[1,2])
b=tf.placeholder(tf.float32,shape=[1,2])
adder_node=tf.add(a,b)
print(sess.run(adder_node,feed_dict={a:[2,4],b:[5.2,8]}))

輸出結果爲[7.2 12]

其中,乘法、除法有比較特殊之處,如果是要對浮點數進行整除,則使用floordiv();如果是要計算兩個張量間的點積,則使用cross()。
下面列出常用的數學函數列表:

通過以上的簡單介紹,相信你已瞭解了TensorFlow的特點和基本的操作方式,接下來,我們將結合案例繼續深入介紹TensorFlow,敬請期待!

 

推薦相關閱讀

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