




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第使用Java操作TensorFlow的方法目錄簡介TensorFlow為何物?張量與操作安裝TensorFlowTensorFlow的JavaAPI類枚舉接口異常圖(Graphs)常量占位符函數(shù)圖形可視化會話(Sessions)Java當(dāng)中加載Python中Saving模塊結(jié)論
簡介
機(jī)器學(xué)習(xí)在全球范圍內(nèi)越來越受歡迎和使用。它已經(jīng)徹底改變了某些應(yīng)用程序的構(gòu)建方式,并且可能會繼續(xù)成為我們?nèi)粘I钪幸粋€(gè)巨大的(并且正在增加的)部分。
沒有什么包裝且機(jī)器學(xué)習(xí)并不簡單。它對許多人來說似乎非常復(fù)雜并常常令人生畏。
像谷歌這樣的公司將自己的機(jī)器學(xué)習(xí)概念與開發(fā)人員聯(lián)系起來,在谷歌幫助下讓他們逐漸邁出第一步,故TensorFlow的框架誕生了。
TensorFlow為何物?
TensorFlow是由谷歌使用Python和C++開發(fā)的開源機(jī)器學(xué)習(xí)框架。
它可以幫助開發(fā)人員輕松獲取數(shù)據(jù),準(zhǔn)備和訓(xùn)練模型,預(yù)測未來狀態(tài),以及執(zhí)行大規(guī)模機(jī)器學(xué)習(xí)。
有了它,我們可以訓(xùn)練和運(yùn)行深度神經(jīng)網(wǎng)絡(luò)的內(nèi)容,諸如光學(xué)字符識別,圖像識別/分類,自然語言處理等。
張量與操作
TensorFlow基于計(jì)算圖,你可以將其想象為具有節(jié)點(diǎn)和邊的經(jīng)典圖。
每個(gè)節(jié)點(diǎn)被稱為操作,它們將零個(gè)或多個(gè)張量輸入并產(chǎn)生零個(gè)或多個(gè)張量輸出。操作可以非常簡單,例如基本的添加,但它們也可以非常復(fù)雜。
張量被描繪為圖的邊緣,并且是核心數(shù)據(jù)單元。當(dāng)我們將它們提供給操作時(shí),我們在這些張量上執(zhí)行不同的功能。它們可以具有單個(gè)或多個(gè)維度,有時(shí)也稱為它們的等級(標(biāo)量:等級0,向量:等級1,矩陣:等級2)。
這些數(shù)據(jù)受到操作的影響通過張量傳遞到計(jì)算圖中,故而稱為TensorFlow。
張量可以以任意數(shù)量的維度存儲數(shù)據(jù),并且有三種主要類型的張量:占位符,變量和常量。
安裝TensorFlow
使用Maven,安裝TensorFlow就像包含依賴項(xiàng)一樣簡單:
dependency
groupIdorg.tensorflow/groupId
artifactIdtensorflow/artifactId
version1.15.0/version
/dependency
如果你的設(shè)備支持GPU功能,可以添加以下依賴:
dependency
groupIdorg.tensorflow/groupId
artifactIdlibtensorflow/artifactId
version1.15.0/version
/dependency
dependency
groupIdorg.tensorflow/groupId
artifactIdlibtensorflow_jni_gpu/artifactId
version1.15.0/version
/dependency
你可以使用TensorFlow對象來檢查當(dāng)前操作的TensorFlow的版本。
System.out.println(TensorFlow.version());
TensorFlow的JavaAPI
JavaAPITensorFlow提供包含在org.tensorflow包中。它目前是實(shí)驗(yàn)性的,因此不能保證其穩(wěn)定性。
需要注意的是TensorFlow唯一完全支持的語言是Python,JavaAPI幾乎沒有什么功能。
API向我們介紹了新的類,接口,枚舉和異常。
類
通過API引入的新類是:
Graph:表示TensorFlow計(jì)算的數(shù)據(jù)流圖;Operation:在Tensors上執(zhí)行計(jì)算的Graph節(jié)點(diǎn);OperationBuilder:Operations的構(gòu)建器類;Output:操作產(chǎn)生的張量的符號句柄;SavedModelBundle:表示從存儲加載的模型;SavedModelBundle.Loader:提供加載SavedModel的選項(xiàng);Server:進(jìn)程內(nèi)TensorFlow服務(wù)器,用于分布式訓(xùn)練;Session:圖形執(zhí)行的驅(qū)動程序;Session.Run:輸出執(zhí)行會話時(shí)獲得的張量和元數(shù)據(jù);Session.Runner:運(yùn)行操作并評估張量;Shape:由操作產(chǎn)生的可能部分已知的張量形狀;Tensor:靜態(tài)類型的多維數(shù)組,其元素是由T描述的類型;TensorFlow:描述TensorFlow運(yùn)行時(shí)的靜態(tài)實(shí)用程序方法;Tensors:用于創(chuàng)建張量對象的類型安全工廠方法;
枚舉
DataType:將張量中的元素類型表示為枚舉;
接口
Operand:由TensorFlow操作的操作數(shù)實(shí)現(xiàn)的接口;
異常
TensorFlowException:執(zhí)行TensorFlow圖時(shí)拋出的未經(jīng)檢查的異常
如果我們將所有這些與Python中的tf模塊進(jìn)行比較將發(fā)現(xiàn)存在明顯的區(qū)別。JavaAPI沒有幾乎相同的功能,至少目前如此。
圖(Graphs)
如前所述,TensorFlow基于計(jì)算圖-其中org.tensorflow.Graph是Java的實(shí)現(xiàn)。
注意:它的實(shí)例是線程安全的,盡管我們需要在完成它之后顯式釋放Graph使用的資源。
讓我們從一個(gè)空圖開始:
Graphgraph=newGraph();
該對象是空的,所以這個(gè)圖表意義不大。要對它做任何操作,我們首先需要使用Operations加載它。
我們使用opBuilder()方法來加載它,它返回一個(gè)OperationBuilder對象,一旦我們調(diào)用.build()方法,它就會將操作添加到我們的圖形中。
常量
讓我們在圖表中添加一個(gè)常量:
Operationx=graph.opBuilder("Const","x")
.setAttr("dtype",DataType.FLOAT)
.setAttr("value",Tensor.create(3.0f))
.build();
占位符
占位符是變量的類型,聲明時(shí)沒有賦值,他們的值將在之后進(jìn)行分配。這允許我們使用沒有任何實(shí)際數(shù)據(jù)的操作來構(gòu)建圖形:
Operationy=graph.opBuilder("Placeholder","y")
.setAttr("dtype",DataType.FLOAT)
.build();
函數(shù)
最后為了解決這個(gè)問題,我們需要添加某些函數(shù)。這些可以像乘法,除法或加法一樣簡單,也可以像矩陣乘法一樣復(fù)雜。和之前一樣,我們使用.opBuilder()方法定義函數(shù):
Operationxy=graph.opBuilder("Mul","xy")
.addInput(x.output(0))
.addInput(y.output(0))
.build();
注意:我們使用input(0)作為張量可以有多個(gè)輸出。
圖形可視化
遺憾的是,JavaAPI還沒有包含任何允許像Python中一樣可視化圖形的工具。
會話(Sessions)
如前所述,Session是Graph的驅(qū)動程序。它封裝了執(zhí)行Operation和Graph計(jì)算張量(tensors)的環(huán)境。
這意味著我們構(gòu)建的圖(graph)中的張量(tensors)實(shí)際上并沒有任何值,因?yàn)槲覀儧]有在會話(session)中運(yùn)行圖形(graph)。
我們首先將圖表添加到會話(session)中:
Sessionsession=newSession(graph);
我們的操作知識簡單地將x于y相乘,為了運(yùn)行我們的圖(graph)并得到計(jì)算結(jié)果,我們需要使用fetch()獲取到xy的操作并為其提供x和y的值:
Tensortensor=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模塊
這可能聽起來有點(diǎn)奇怪,但由于Python是唯一受到良好支持的語言,因此JavaAPI仍然沒有保存模型的功能。
這意味著JavaAPI僅用于服務(wù)用例,至少在TensorFlow完全支持之前。目前至少我們可以使用SavedModelBundle類在Python中訓(xùn)練和保存模型,然后使用Java加載它們來為它們提供服務(wù):
SavedModelBundlemodel=SavedModelBundle.load("./model","serve");
Tensortensor=model.session().runner().fetch("xy").feed("x",Tensor.create(5.0f)).feed("y",Tensor.create(2.0f))
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 海鮮餐廳租賃經(jīng)營及海鮮養(yǎng)殖基地合作協(xié)議
- 離婚協(xié)議車輛財(cái)產(chǎn)分割及協(xié)議書
- 茶樓與茶藝文化交流活動合作協(xié)議
- 環(huán)保產(chǎn)業(yè)參股合作協(xié)議書
- 拆遷安置房交易及配套設(shè)施建設(shè)合作協(xié)議
- 氣候變化與生態(tài)系統(tǒng)重構(gòu)-洞察闡釋
- 燃料適應(yīng)性燃燒器設(shè)計(jì)-洞察闡釋
- 海航金融科技與智能駕駛艙創(chuàng)新-洞察闡釋
- 科研項(xiàng)目合同執(zhí)行與控制措施
- 門采購施工安裝合同書
- 2025屆河南省青桐鳴5月全真模擬卷·高考考前適應(yīng)性考試-生物試題(含答案)
- 夜場水煙合作協(xié)議書
- 2025年“鑄牢中華民族共同體意識”知識競賽題庫及答案
- 河南省青桐鳴大聯(lián)考普通高中2024-2025學(xué)年高三考前適應(yīng)性考試地理試題及答案
- 管道勞務(wù)分包協(xié)議書
- 2024年湖南出版中南傳媒招聘筆試真題
- 2025-2030中國鋰電子電池行業(yè)市場深度調(diào)研及前景趨勢與投資研究報(bào)告
- 合肥市2025屆高三年級5月教學(xué)質(zhì)量檢測(合肥三模)生物試題+答案
- 7 什么比獵豹的速度更快 第二課時(shí) 課件
- 江蘇省南京市建鄴區(qū)2023-2024學(xué)年八年級下學(xué)期期末考試物理試題【含答案解析】
- 公立醫(yī)院與民營醫(yī)院醫(yī)聯(lián)體合作協(xié)議書(2篇)
評論
0/150
提交評論