什么是TensorFlow

這篇文章主要介紹“什么是TensorFlow”,在日常操作中,相信很多人在什么是TensorFlow問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”什么是TensorFlow”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

10年積累的網(wǎng)站制作、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)制作后付款的網(wǎng)站建設(shè)流程,更有淮陰免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

簡(jiǎn)介

機(jī)器學(xué)習(xí)在全球范圍內(nèi)越來(lái)越受歡迎和使用。 它已經(jīng)徹底改變了某些應(yīng)用程序的構(gòu)建方式,并且可能會(huì)繼續(xù)成為我們?nèi)粘I钪幸粋€(gè)巨大的(并且正在增加的)部分。 沒(méi)有什么包裝且機(jī)器學(xué)習(xí)并不簡(jiǎn)單。 它對(duì)許多人來(lái)說(shuō)似乎非常復(fù)雜并常常令人生畏。 像谷歌這樣的公司將自己的機(jī)器學(xué)習(xí)概念與開發(fā)人員聯(lián)系起來(lái),在谷歌幫助下讓他們逐漸邁出第一步,故TensorFlow的框架誕生了。

TensorFlow為何物?

TensorFlow是由谷歌使用Python和C++開發(fā)的開源機(jī)器學(xué)習(xí)框架。 它可以幫助開發(fā)人員輕松獲取數(shù)據(jù),準(zhǔn)備和訓(xùn)練模型,預(yù)測(cè)未來(lái)狀態(tài),以及執(zhí)行大規(guī)模機(jī)器學(xué)習(xí)。 有了它,我們可以訓(xùn)練和運(yùn)行深度神經(jīng)網(wǎng)絡(luò)的內(nèi)容,諸如光學(xué)字符識(shí)別,圖像識(shí)別/分類,自然語(yǔ)言處理等。

張量與操作

TensorFlow基于計(jì)算圖,你可以將其想象為具有節(jié)點(diǎn)和邊的經(jīng)典圖。 每個(gè)節(jié)點(diǎn)被稱為操作,它們將零個(gè)或多個(gè)張量輸入并產(chǎn)生零個(gè)或多個(gè)張量輸出。 操作可以非常簡(jiǎn)單,例如基本的添加,但它們也可以非常復(fù)雜。 張量被描繪為圖的邊緣,并且是核心數(shù)據(jù)單元。 當(dāng)我們將它們提供給操作時(shí),我們?cè)谶@些張量上執(zhí)行不同的功能。 它們可以具有單個(gè)或多個(gè)維度,有時(shí)也稱為它們的等級(jí)(標(biāo)量:等級(jí)0,向量:等級(jí)1,矩陣:等級(jí)2)。 這些數(shù)據(jù)受到操作的影響通過(guò)張量傳遞到計(jì)算圖中,故而稱為TensorFlow。 張量可以以任意數(shù)量的維度存儲(chǔ)數(shù)據(jù),并且有三種主要類型的張量:占位符,變量和常量。

安裝TensorFlow

使用Maven,安裝TensorFlow就像包含依賴項(xiàng)一樣簡(jiǎn)單:

<dependency>
  <groupid>org.tensorflow</groupid>
  <artifactid>tensorflow</artifactid>
  <version>1.13.1</version>
</dependency>

如果你的設(shè)備支持GPU功能,可以添加以下依賴:

<dependency>
  <groupid>org.tensorflow</groupid>
  <artifactid>libtensorflow</artifactid>
  <version>1.13.1</version>
</dependency>

<dependency>
  <groupid>org.tensorflow</groupid>
  <artifactid>libtensorflow_jni_gpu</artifactid>
  <version>1.13.1</version>
</dependency>

你可以使用TensorFlow對(duì)象來(lái)檢查當(dāng)前操作的TensorFlow的版本。

System.out.println(TensorFlow.version());

TensorFlow的JavaAPI

Java API TensorFlow提供包含在org.tensorflow包中。 它目前是實(shí)驗(yàn)性的,因此不能保證其穩(wěn)定性。 需要注意的是TensorFlow唯一完全支持的語(yǔ)言是Python,Java API幾乎沒(méi)有什么功能。 API向我們介紹了新的類,接口,枚舉和異常。

通過(guò)API引入的新類是:

  • Graph:表示TensorFlow計(jì)算的數(shù)據(jù)流圖;

  • Operation:在Tensors上執(zhí)行計(jì)算的Graph節(jié)點(diǎn);

  • OperationBuilder:Operations的構(gòu)建器類;

  • Output<t>:操作產(chǎn)生的張量的符號(hào)句柄;

  • SavedModelBundle:表示從存儲(chǔ)加載的模型;

  • SavedModelBundle.Loader:提供加載SavedModel的選項(xiàng);

  • Server:進(jìn)程內(nèi)TensorFlow服務(wù)器,用于分布式訓(xùn)練;

  • Session:圖形執(zhí)行的驅(qū)動(dòng)程序;

  • Session.Run:輸出執(zhí)行會(huì)話時(shí)獲得的張量和元數(shù)據(jù);

  • Session.Runner:運(yùn)行操作并評(píng)估張量;

  • Shape:由操作產(chǎn)生的可能部分已知的張量形狀;

  • Tensor<t>:靜態(tài)類型的多維數(shù)組,其元素是由T描述的類型;

  • TensorFlow:描述TensorFlow運(yùn)行時(shí)的靜態(tài)實(shí)用程序方法;

  • Tensors:用于創(chuàng)建張量對(duì)象的類型安全工廠方法;

枚舉
  • DataType:將張量中的元素類型表示為枚舉;

接口
  • Operand<t>:由TensorFlow操作的操作數(shù)實(shí)現(xiàn)的接口;

異常
  • TensorFlowException:執(zhí)行TensorFlow圖時(shí)拋出的未經(jīng)檢查的異常

如果我們將所有這些與Python中的tf模塊進(jìn)行比較將發(fā)現(xiàn)存在明顯的區(qū)別。 Java API沒(méi)有幾乎相同的功能,至少目前如此。

圖(Graphs)

如前所述,TensorFlow基于計(jì)算圖 - 其中org.tensorflow.Graph是Java的實(shí)現(xiàn)。 注意:它的實(shí)例是線程安全的,盡管我們需要在完成它之后顯式釋放Graph使用的資源。

讓我們從一個(gè)空?qǐng)D開始:

Graph graph = new Graph();

該對(duì)象是空的,所以這個(gè)圖表意義不大。 要對(duì)它做任何操作,我們首先需要使用Operations加載它。 我們使用opBuilder()方法來(lái)加載它,它返回一個(gè)OperationBuilder對(duì)象,一旦我們調(diào)用.build()方法,它就會(huì)將操作添加到我們的圖形中。

常量

讓我們?cè)趫D表中添加一個(gè)常量:

Operation x = graph.opBuilder("Const", "x")
               .setAttr("dtype", DataType.FLOAT)
               .setAttr("value", Tensor.create(3.0f))
               .build();
占位符

占位符是變量的“類型”,聲明時(shí)沒(méi)有賦值,他們的值將在之后進(jìn)行分配。 這允許我們使用沒(méi)有任何實(shí)際數(shù)據(jù)的操作來(lái)構(gòu)建圖形:

Operation y = graph.opBuilder("Placeholder", "y")
        .setAttr("dtype", DataType.FLOAT)
        .build();
函數(shù)

最后為了解決這個(gè)問(wèn)題,我們需要添加某些函數(shù)。 這些可以像乘法,除法或加法一樣簡(jiǎn)單,也可以像矩陣乘法一樣復(fù)雜。 和之前一樣,我們使用.opBuilder()方法定義函數(shù):

Operation xy = graph.opBuilder("Mul", "xy")
  .addInput(x.output(0))
  .addInput(y.output(0))
  .build();

注意:我們使用input(0)作為張量可以有多個(gè)輸出。

圖形可視化

遺憾的是,Java API還沒(méi)有包含任何允許像Python中一樣可視化圖形的工具。

會(huì)話(Sessions)

如前所述,Session是Graph的驅(qū)動(dòng)程序。 它封裝了執(zhí)行Operation和Graph計(jì)算張量(tensors)的環(huán)境。 這意味著我們構(gòu)建的圖(graph)中的張量(tensors)實(shí)際上并沒(méi)有任何值,因?yàn)槲覀儧](méi)有在會(huì)話(session)中運(yùn)行圖形(graph)。 我們首先將圖表添加到會(huì)話(session)中:

Session session = new Session(graph);

我們的操作知識(shí)簡(jiǎn)單地將x于y相乘,為了運(yùn)行我們的圖(graph)并得到計(jì)算結(jié)果,我們需要使用fetch()獲取到xy的操作并為其提供x和y的值:

Tensor tensor = session.runner().fetch("xy").feed("x", Tensor.create(5.0f)).feed("y", Tensor.create(2.0f)).run().get(0);
System.out.println(tensor.floatValue());

運(yùn)行這段代碼將產(chǎn)生的結(jié)果如下:

10.0f

Java當(dāng)中加載Python中Saving模塊

這可能聽起來(lái)有點(diǎn)奇怪,但由于Python是唯一受到良好支持的語(yǔ)言,因此Java API仍然沒(méi)有保存模型的功能。 這意味著Java API僅用于服務(wù)用例,至少在TensorFlow完全支持之前。 目前至少我們可以使用SavedModelBundle類在Python中訓(xùn)練和保存模型,然后使用Java加載它們來(lái)為它們提供服務(wù):

SavedModelBundle model = SavedModelBundle.load("./model", "serve"); 
Tensor tensor = model.session().runner().fetch("xy").feed("x", Tensor.create(5.0f)).feed("y", Tensor.create(2.0f)).run().get(0);  

System.out.println(tensor.floatValue());

到此,關(guān)于“什么是TensorFlow”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

網(wǎng)頁(yè)題目:什么是TensorFlow
文章出自:http://bm7419.com/article4/ipojoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、響應(yīng)式網(wǎng)站、定制開發(fā)靜態(tài)網(wǎng)站、營(yíng)銷型網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作

廣告

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

成都網(wǎng)頁(yè)設(shè)計(jì)公司