首頁  >  文章  >  後端開發  >  Tensorflow基礎(機器學習開源軟體庫)

Tensorflow基礎(機器學習開源軟體庫)

angryTom
angryTom轉載
2019-11-29 14:53:003446瀏覽

Tensorflow基礎(機器學習開源軟體庫)

說明:本文實例使用Python版本為3.5.6,Tensorflow版本為2.0

介紹

Tensorflow是Google推出的機器學習開源神器,對Python有著良好的語言支持,支援CPU,GPU和Google TPU等硬件,並且已經擁有了各種各樣的模型和演算法。目前,Tensorflow已被廣泛應用於文字處理,語音辨識和影像辨識等多項機器學習和深度學習領域。

基礎架構

分為三層:應用層、介面層、核心層

推薦:《

#python教學

》  

#應用程式層

提供了機器學習相關的訓練庫、預測庫和針對Python、C 和Java等變成語言的程式設計環境,類似web系統的前端,主要實現了計算圖的建構。

介面層

對Tensorflow功能模組的封裝,以便於其它語言平台的呼叫。

核心層

最重要的部分,包括裝置層、網路層、資料操作層和圖計算層,執行應用層的運算。

1.設備層

包括Tensorflow在不同硬體設備上的實現,主要支援CPU、GPU和Mobile等設備,在不同硬體設備上實現運算指令的轉換,給上層提供統一的接口,實現程序的跨平台功能。

2.網路層

網路層主要包括RPC和RDMA通訊協議,實現不同裝置之間的資料傳輸和更新,這些協定都會在分散式運算中用到。

3.資料操作層

以tensor為處理對象,實現tensor的各種運算與運算。

4.圖計算層

包括分散式計算圖和本地計算圖的實現,實現圖的建立、編譯、最佳化和執行等。

設計理念

可以將Tensorflow理解為一張計算圖中“張量的流動”,其中,Tensor(張量)代表了計算圖中的邊,Flow(流動)代表了計算圖中節點所做的操作而形成的資料流動。

其設計理念是以資料流為核心,當建立對應的機器學習模型後,使用訓練資料在模型中進行資料流動,同時將結果以反向傳播的方式回饋給模型中的參數,以進行調參,使用調整後的參數對訓練資料再次進行迭代計算。

程式設計特點

有兩個程式設計特點:

圖的定義和圖的運行完全分開在tensorflow中,需要預先定義各種變量,建立相關的資料流程圖,在資料流程圖中建立各種變數之間的計算關係,完成圖的定義,需要把運算的輸入資料放進去後,才會形成輸出值。

圖的計算在會話中執行

tensorflow的相關計算在圖中進行定義,而圖的具體運行壞境在會話(session)中,開啟會話後,才能開始計算,關閉會話就不能再進行計算了。 舉例:

import tensorflow as tf
tf.compat.v1.disable_eager_execution()
a = 3
b = 4
c = 5
y = tf.add(a*b, c)
print(y)
a = tf.constant(3, tf.int32)
b = tf.constant(4, tf.int32)
c = tf.constant(5, tf.int32)
y = tf.add(a*b, c)
print(y)
session = tf.compat.v1.Session()
print(session.run(y))
session.close()

可以看出,在圖建立後,並在會話中執行資料計算,最終輸出結果。

設計的好處就是:學習的過程中,消耗最多的是對資料的訓練,這樣設計的話,當進行計算時,圖已經確定,計算就只剩下一個不斷迭代的過程。

基本概念

Tensor

張量,是tensorflow中最主要的資料結構,張量用於在計算圖中進行資料傳遞,創建了張量後,需要將其賦值給一個變數或占位符,之後才會將該張量加入計算圖中。

session

會話,是Tensorflow中計算圖的具體執行者,與圖進行實際的互動。一個會話中可以有多個圖,而會話的主要目的是將訓練資料加入圖中進行計算,也可以修改圖的結構。

呼叫模式建議使用with語句:

with session:
    session.run()
Variable

變量,表示圖中的各個計算參數,透過調整這些變數的狀態來最佳化機器學習演算法。建立變數應使用tf.Variable(),透過輸入一個張量,傳回一個變量,變數宣告後需初始化才能使用。

舉例說明:

import tensorflow as tf
tf.compat.v1.disable_eager_execution()
tensor = tf.ones([1, 3])
test_var = tf.Variable(tensor)
# 初始化变量
init_op = tf.compat.v1.global_variables_initializer()
session = tf.compat.v1.Session()
with session:
    print("tensor is ", session.run(tensor))
    # print("test_var is ", session.run(test_var))
    session.run(init_op)
    print("after init, test_var is", session.run(test_var))

Placeholder

####佔位符,用於表示輸入輸出資料的格式,宣告了資料位置,允許傳入指定類型和形狀的數據,透過會話中的feed_dict參數取得數據,在計算圖運行時使用取得的數據進行計算,計算完畢後取得的數據就會消失。 ######舉例說明:###
x = tf.compat.v1.placeholder(tf.int32)
y = tf.compat.v1.placeholder(tf.int32)
z = tf.add(x, y)
session = tf.compat.v1.Session()
with session:
    print(session.run([z], feed_dict={x: [1, 2], y: [2, 3]}))
######Operation#########操作,是圖中的節點,輸入輸出都是Tensor,作用是完成各種操作,包括:######數學運算:add, sub, mul, div, exp ...######陣列運算:concat, slice, split, rank ...######矩陣運算:matmul, matrixinverse ...######神經網路建構:softmax, sigmoid, relu ...###

检查点:save, restore ...

队列和同步:enqueue, dequeue, mutexacquire, mutexrelease ...

张量控制:merge, switch, enter, leave ...

Queue

队列,图中有状态的节点。包含入列(endqueue)和出列(dequeue)两个操作,入列返回计算图中的一个操作节点,出列返回一个tensor值。

其中,队列有两种:

1. FIFOQueue

按入列顺序出列的队列,在需要读入的训练样本有序时使用。举个例子:

fifo_queue = tf.compat.v1.FIFOQueue(10, 'int32')
init = fifo_queue.enqueue_many(([1, 2, 3, 4, 5, 6], ))
with tf.compat.v1.Session() as session:
    session.run(init)
    queue_size = session.run(fifo_queue.size())
    for item in range(queue_size):
        print('fifo_queue', session.run(fifo_queue.dequeue()))

2. RandomShuffleQueue

以随机顺序出列的队列,读入的训练样本无序时使用。举个例子:

rs_queue = tf.compat.v1.RandomShuffleQueue(capacity=5, min_after_dequeue=0, dtypes='int32')
init = rs_queue.enqueue_many(([1, 2, 3, 4, 5], ))
with tf.compat.v1.Session() as session:
    session.run(init)
    queue_size = session.run(rs_queue.size())
    for i in range(queue_size):
        print('rs_queue', session.run(rs_queue.dequeue()))

本文来自 python教程 栏目,欢迎学习!  

以上是Tensorflow基礎(機器學習開源軟體庫)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除