最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Java操作TensorFlow的方法

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

簡介

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

TensorFlow為何物?

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

張量與操作

TensorFlow基于計算圖,你可以將其想象為具有節(jié)點和邊的經(jīng)典圖。
每個節(jié)點被稱為操作,它們將零個或多個張量輸入并產生零個或多個張量輸出。 操作可以非常簡單,例如基本的添加,但它們也可以非常復雜。
張量被描繪為圖的邊緣,并且是核心數(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的構建器類;
  • Output:操作產生的張量的符號句柄;
  • SavedModelBundle:表示從存儲加載的模型;
  • SavedModelBundle.Loader:提供加載SavedModel的選項;
  • Server:進程內TensorFlow服務器,用于分布式訓練;
  • Session:圖形執(zhí)行的驅動程序;
  • Session.Run:輸出執(zhí)行會話時獲得的張量和元數(shù)據(jù);
  • Session.Runner:運行操作并評估張量;
  • Shape:由操作產生的可能部分已知的張量形狀;
  • 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對象,一旦我們調用.build()方法,它就會將操作添加到我們的圖形中。

常量

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

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

占位符

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

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的驅動程序。 它封裝了執(zhí)行Operation和Graph計算張量(tensors)的環(huán)境。
這意味著我們構建的圖(graph)中的張量(tensors)實際上并沒有任何值,因為我們沒有在會話(session)中運行圖形(graph)。
我們首先將圖表添加到會話(session)中:

Session session = new Session(graph);

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

運行這段代碼將產生的結果如下:

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

結論

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

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

相關文章

  • MyBatis 中 SqlMapConfig 配置文件詳解

    MyBatis 中 SqlMapConfig 配置文件詳解

    這篇文章主要介紹了MyBatis 中 SqlMapConfig 配置文件詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Java?源碼重讀系列之?HashMap

    Java?源碼重讀系列之?HashMap

    這篇文章主要為大家介紹了Java源碼重讀系列之HashMap示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • SpringBoot加載配置6種方式分析

    SpringBoot加載配置6種方式分析

    這篇文章主要介紹了SpringBoot加載配置6種方式分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Data Source與數(shù)據(jù)庫連接池簡介(JDBC簡介)

    Data Source與數(shù)據(jù)庫連接池簡介(JDBC簡介)

    DataSource是作為DriverManager的替代品而推出的,DataSource 對象是獲取連接的首選方法,這篇文章主要介紹了Data Source與數(shù)據(jù)庫連接池簡介(JDBC簡介),需要的朋友可以參考下
    2022-11-11
  • 詳解java.lang.NumberFormatException錯誤及解決辦法

    詳解java.lang.NumberFormatException錯誤及解決辦法

    這篇文章主要介紹了詳解java.lang.NumberFormatException錯誤及解決辦法,本文詳解的介紹了錯誤的解決方法,感興趣的可以一起來了解一下
    2020-05-05
  • 解決maven啟動Spring項目報錯的問題

    解決maven啟動Spring項目報錯的問題

    下面小編就為大家分享一篇解決maven啟動Spring項目報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Java 實戰(zhàn)范例之線上新聞平臺系統(tǒng)的實現(xiàn)

    Java 實戰(zhàn)范例之線上新聞平臺系統(tǒng)的實現(xiàn)

    讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+jsp+jdbc+mysql實現(xiàn)一個線上新聞平臺系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2021-11-11
  • 詳解IntelliJ IDEA 快捷鍵整合(大全)

    詳解IntelliJ IDEA 快捷鍵整合(大全)

    這篇文章主要介紹了詳解IntelliJ IDEA 快捷鍵整合,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-08-08
  • java 日期各種格式之間的相互轉換實例代碼

    java 日期各種格式之間的相互轉換實例代碼

    這篇文章主要介紹了java 日期各種格式之間的相互轉換實例代碼的相關資料,需要的朋友可以參考下
    2017-02-02
  • 簡單了解java集合框架LinkedList使用方法

    簡單了解java集合框架LinkedList使用方法

    這篇文章主要介紹了簡單了解java集合框架LinkedList使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08

最新評論

华宁县| 家居| 尤溪县| 泸州市| 禹城市| 赞皇县| 惠水县| 杭锦旗| 微山县| 临安市| 凤冈县| 稻城县| 马龙县| 盐边县| 达州市| 承德县| 同心县| 格尔木市| 阜宁县| 固安县| 巴马| 镇康县| 田东县| 从化市| 黔江区| 宣城市| 阿坝县| 兖州市| 彰武县| 隆德县| 沁源县| 石嘴山市| 晴隆县| 陆良县| 澄江县| 遂宁市| 新建县| 商丘市| 敖汉旗| 威信县| 青阳县|