Tensorflow是什么-創(chuàng)新互聯(lián)

Tensorflow是什么?針對這個(gè)問題,這篇文章給出了相對應(yīng)的分析和解答,希望能幫助更多想解決這個(gè)問題的朋友找到更加簡單易行的辦法。

成都創(chuàng)新互聯(lián)于2013年開始,先為蕭山等服務(wù)建站,蕭山等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為蕭山企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

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

介紹

Tensorflow是Google推出的機(jī)器學(xué)習(xí)開源神器,對Python有著良好的語言支持,支持CPU,GPU和Google TPU等硬件,并且已經(jīng)擁有了各種各樣的模型和算法。目前,Tensorflow已被廣泛應(yīng)用于文本處理,語音識別和圖像識別等多項(xiàng)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)領(lǐng)域。

基礎(chǔ)框架

分為三層:應(yīng)用層、接口層和核心層

應(yīng)用層

提供了機(jī)器學(xué)習(xí)相關(guān)的訓(xùn)練庫、預(yù)測庫和針對Python、C++和Java等變成語言的編程環(huán)境,類似于web系統(tǒng)的前端,主要實(shí)現(xiàn)了對計(jì)算圖的構(gòu)造。

接口層

對Tensorflow功能模塊的封裝,便于其它語言平臺的調(diào)用。

核心層

最重要的部分,包括設(shè)備層、網(wǎng)絡(luò)層、數(shù)據(jù)操作層和圖計(jì)算層,執(zhí)行應(yīng)用層的計(jì)算。

1.設(shè)備層

包括Tensorflow在不同硬件設(shè)備上的實(shí)現(xiàn),主要支持CPU、GPU和Mobile等設(shè)備,在不同硬件設(shè)備上實(shí)現(xiàn)計(jì)算命令的轉(zhuǎn)換,給上層提供統(tǒng)一的接口,實(shí)現(xiàn)程序的跨平臺功能。

2.網(wǎng)絡(luò)層

網(wǎng)絡(luò)層主要包括RPC和RDMA通信協(xié)議,實(shí)現(xiàn)不同設(shè)備之間的數(shù)據(jù)傳輸和更新,這些協(xié)議都會在分布式計(jì)算中用到。

3.數(shù)據(jù)操作層

以tensor為處理對象,實(shí)現(xiàn)tensor的各種操作和計(jì)算。

4.圖計(jì)算層

包括分布式計(jì)算圖和本地計(jì)算圖的實(shí)現(xiàn),實(shí)現(xiàn)圖的創(chuàng)建、編譯、優(yōu)化和執(zhí)行等。

設(shè)計(jì)理念

可以將Tensorflow理解為一張計(jì)算圖中“張量的流動”,其中,Tensor(張量)代表了計(jì)算圖中的邊,F(xiàn)low(流動)代表了計(jì)算圖中節(jié)點(diǎn)所做的操作而形成的數(shù)據(jù)流動。

其設(shè)計(jì)理念是以數(shù)據(jù)流為核心,當(dāng)構(gòu)建相應(yīng)的機(jī)器學(xué)習(xí)模型后,使用訓(xùn)練數(shù)據(jù)在模型中進(jìn)行數(shù)據(jù)流動,同時(shí)將結(jié)果以反向傳播的方式反饋給模型中的參數(shù),以進(jìn)行調(diào)參,使用調(diào)整后的參數(shù)對訓(xùn)練數(shù)據(jù)再次進(jìn)行迭代計(jì)算。

編程特點(diǎn)

有兩個(gè)編程特點(diǎn):

圖的定義和圖的運(yùn)行完全分開

在tensorflow中,需要預(yù)先定義各種變量,建立相關(guān)的數(shù)據(jù)流圖,在數(shù)據(jù)流圖中創(chuàng)建各種變量之間的計(jì)算關(guān)系,完成圖的定義,需要把運(yùn)算的輸入數(shù)據(jù)放進(jìn)去后,才會形成輸出值。

圖的計(jì)算在會話中執(zhí)行

tensorflow的相關(guān)計(jì)算在圖中進(jìn)行定義,而圖的具體運(yùn)行壞境在會話(session)中,開啟會話后,才能開始計(jì)算,關(guān)閉會話就不能再進(jìn)行計(jì)算了。

舉個(gè)例子:

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()

可以看出,在圖創(chuàng)建后,并在會話中執(zhí)行數(shù)據(jù)計(jì)算,最終輸出結(jié)果。

設(shè)計(jì)的好處就是:學(xué)習(xí)的過程中,消耗最多的是對數(shù)據(jù)的訓(xùn)練,這樣設(shè)計(jì)的話,當(dāng)進(jìn)行計(jì)算時(shí),圖已經(jīng)確定,計(jì)算就只剩下一個(gè)不斷迭代的過程。

基本概念

Tensor

張量,是tensorflow中最主要的數(shù)據(jù)結(jié)構(gòu),張量用于在計(jì)算圖中進(jìn)行數(shù)據(jù)傳遞,創(chuàng)建了張量后,需要將其賦值給一個(gè)變量或占位符,之后才會將該張量添加到計(jì)算圖中。

session

會話,是Tensorflow中計(jì)算圖的具體執(zhí)行者,與圖進(jìn)行實(shí)際的交互。一個(gè)會話中可以有多個(gè)圖,會話的主要目的是將訓(xùn)練數(shù)據(jù)添加到圖中進(jìn)行計(jì)算,也可以修改圖的結(jié)構(gòu)。

調(diào)用模式推薦使用with語句:

with session:
    session.run()
Variable

變量,表示圖中的各個(gè)計(jì)算參數(shù),通過調(diào)整這些變量的狀態(tài)來優(yōu)化機(jī)器學(xué)習(xí)算法。創(chuàng)建變量應(yīng)使用tf.Variable(),通過輸入一個(gè)張量,返回一個(gè)變量,變量聲明后需進(jìn)行初始化才能使用。

舉例說明:

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

占位符,用于表示輸入輸出數(shù)據(jù)的格式,聲明了數(shù)據(jù)位置,允許傳入指定類型和形狀的數(shù)據(jù),通過會話中的feed_dict參數(shù)獲取數(shù)據(jù),在計(jì)算圖運(yùn)行時(shí)使用獲取的數(shù)據(jù)進(jìn)行計(jì)算,計(jì)算完畢后獲取的數(shù)據(jù)就會消失。

舉例說明:

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

操作,是圖中的節(jié)點(diǎn),輸入輸出都是Tensor,作用是完成各種操作,包括:

數(shù)學(xué)運(yùn)算:add, sub, mul, div, exp ...

數(shù)組運(yùn)算:concat, slice, split, rank ...

矩陣運(yùn)算:matmul, matrixinverse ...

神經(jīng)網(wǎng)絡(luò)構(gòu)建:softmax, sigmoid, relu ...

檢查點(diǎn):save, restore ...

隊(duì)列和同步:enqueue, dequeue, mutexacquire, mutexrelease ...

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

Queue

隊(duì)列,圖中有狀態(tài)的節(jié)點(diǎn)。包含入列(endqueue)和出列(dequeue)兩個(gè)操作,入列返回計(jì)算圖中的一個(gè)操作節(jié)點(diǎn),出列返回一個(gè)tensor值。

其中,隊(duì)列有兩種:

1. FIFOQueue

按入列順序出列的隊(duì)列,在需要讀入的訓(xùn)練樣本有序時(shí)使用。舉個(gè)例子:

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

以隨機(jī)順序出列的隊(duì)列,讀入的訓(xùn)練樣本無序時(shí)使用。舉個(gè)例子:

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()))

關(guān)于Tensorflow的介紹就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

本文標(biāo)題:Tensorflow是什么-創(chuàng)新互聯(lián)
文章路徑:http://muchs.cn/article12/cdgegc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、服務(wù)器托管、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司