欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Java操作TensorFlow的方法

 更新時間:2023年05月10日 11:51:30   作者:itwetouch  
TensorFlow是一個功能強大且廣泛使用的框架,它不斷得到改進,并最近被引入新語言包括Java和JavaScript,這篇文章主要介紹了如何使用Java操作TensorFlow,需要的朋友可以參考下

簡介

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

TensorFlow為何物?

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

張量與操作

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

安裝TensorFlow

使用Maven,安裝TensorFlow就像包含依賴項一樣簡單:

<dependency>
  <groupId>org.tensorflow</groupId>
  <artifactId>tensorflow</artifactId>
  <version>1.15.0</version>
</dependency>

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

<dependency>
  <groupId>org.tensorflow</groupId>
  <artifactId>libtensorflow</artifactId>
  <version>1.15.0</version>
</dependency>
<dependency>
  <groupId>org.tensorflow</groupId>
  <artifactId>libtensorflow_jni_gpu</artifactId>
  <version>1.15.0</version>
</dependency>

你可以使用TensorFlow對象來檢查當前操作的TensorFlow的版本。

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

TensorFlow的JavaAPI

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

通過API引入的新類是:

  • Graph:表示TensorFlow計算的數(shù)據(jù)流圖;
  • Operation:在Tensors上執(zhí)行計算的Graph節(jié)點;
  • OperationBuilder:Operations的構(gòu)建器類;
  • Output:操作產(chǎn)生的張量的符號句柄;
  • SavedModelBundle:表示從存儲加載的模型;
  • SavedModelBundle.Loader:提供加載SavedModel的選項;
  • Server:進程內(nèi)TensorFlow服務器,用于分布式訓練;
  • Session:圖形執(zhí)行的驅(qū)動程序;
  • Session.Run:輸出執(zhí)行會話時獲得的張量和元數(shù)據(jù);
  • Session.Runner:運行操作并評估張量;
  • Shape:由操作產(chǎn)生的可能部分已知的張量形狀;
  • Tensor:靜態(tài)類型的多維數(shù)組,其元素是由T描述的類型;
  • TensorFlow:描述TensorFlow運行時的靜態(tài)實用程序方法;
  • Tensors:用于創(chuàng)建張量對象的類型安全工廠方法;

枚舉

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

接口

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

異常

TensorFlowException:執(zhí)行TensorFlow圖時拋出的未經(jīng)檢查的異常
如果我們將所有這些與Python中的tf模塊進行比較將發(fā)現(xiàn)存在明顯的區(qū)別。 Java API沒有幾乎相同的功能,至少目前如此。

圖(Graphs)

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

讓我們從一個空圖開始:

Graph graph = new Graph();

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

常量

讓我們在圖表中添加一個常量:

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

占位符

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

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

函數(shù)

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

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

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

圖形可視化

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

會話(Sessions)

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

Session session = new Session(graph);

我們的操作知識簡單地將x于y相乘,為了運行我們的圖(graph)并得到計算結(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());

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

10.0f

Java當中加載Python中Saving模塊

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

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

結(jié)論

TensorFlow是一個功能強大且廣泛使用的框架。 它不斷得到改進,并最近被引入新語言:包括Java和JavaScript。
盡管Java API還沒有像TensorFlow在Python中那么多的功能,但它仍然可以作為向Java開發(fā)人員介紹TensorFlow的一個很好的開始。

到此這篇關(guān)于如何使用Java操作TensorFlow的文章就介紹到這了,更多相關(guān)Java操作TensorFlow內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java學習隨記之多線程編程

    Java學習隨記之多線程編程

    這篇文章主要介紹了Java中的多線程編程的相關(guān)知識,文中的示例代碼介紹詳細,對我們的學習或工作有一定的價值,感興趣的小伙伴可以了解一下
    2021-12-12
  • Java構(gòu)造函數(shù)的相互調(diào)用代碼示例

    Java構(gòu)造函數(shù)的相互調(diào)用代碼示例

    這篇文章主要介紹了Java構(gòu)造函數(shù)的相互調(diào)用代碼示例,分享了兩段代碼示例,通過this關(guān)鍵字實現(xiàn)對的構(gòu)造函數(shù)的調(diào)用,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 基于Spring實現(xiàn)文件上傳功能

    基于Spring實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細介紹了Spring實現(xiàn)文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • java設計模式之橋接模式(Bridge)

    java設計模式之橋接模式(Bridge)

    這篇文章主要為大家詳細介紹了java設計模式之橋接模式Bridge,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Mybatis-Plus實現(xiàn)公共字段自動賦值的方法

    Mybatis-Plus實現(xiàn)公共字段自動賦值的方法

    這篇文章主要介紹了Mybatis-Plus實現(xiàn)公共字段自動賦值的方法,涉及到通用字段自動填充的最佳實踐總結(jié),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • IDEA快速生成實體類的示例教程

    IDEA快速生成實體類的示例教程

    這篇文章主要介紹了IDEA快速生成實體類的示例教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • mybatis代碼生成+自定義注解+自定義注釋實例

    mybatis代碼生成+自定義注解+自定義注釋實例

    這篇文章主要介紹了mybatis代碼生成+自定義注解+自定義注釋實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java通過MyBatis框架對MySQL數(shù)據(jù)進行增刪查改的基本方法

    Java通過MyBatis框架對MySQL數(shù)據(jù)進行增刪查改的基本方法

    MyBatis框架由Java的JDBC API進一步封裝而來,在操作數(shù)據(jù)庫方面效果拔群,接下來我們就一起來看看Java通過MyBatis框架對MySQL數(shù)據(jù)進行增刪查改的基本方法:
    2016-06-06
  • java單向鏈表的實現(xiàn)實例

    java單向鏈表的實現(xiàn)實例

    java單向鏈表的實現(xiàn)實例。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • Java多線程基礎——Lock類

    Java多線程基礎——Lock類

    Lock類是Java類來提供的功能,豐富的api使得Lock類的同步功能比synchronized的同步更強大。本文對此進行詳細介紹,下面跟著小編一起來看下吧
    2017-02-02

最新評論