Deeplearning4j【基礎 01】初識Java深度學習框架DL4J

初識Java深度學習框架DL4J

  • 1.起因
  • 2.簡介
  • 3.組件
    • 3.1 Deeplearning4j/ScalNet
      • 3.1.1 Deeplearning4jf(Java)
      • 3.1.2 ScalNet(Scala)
    • 3.2 ND4J/LibND4J
    • 3.3 SameDiff
    • 3.4 DataVec
    • 3.5 Arbiter
    • 3.6 RL4J
  • 4.總結

內容來自網絡,基于官方文檔【 Deeplearning4j】、知乎【 DL4J開發者社區】、OSCHINA【 Deeplearning4j 分布式深度學習庫】、科普中國·科學百科【 Deeplearning4j】等文章進行整理,簡化了一些信息并通過深度學習菜鳥 我這個人形GPT〒_〒的思維方式進行闡述。

1.起因

  • LLM如火如荼地影響著整個互聯網應用,AI也成為焦點,之前的大數據分析似乎熱度過去了,大家都想學點兒ML,但是Python、GPU不是都具備的。
  • DL4J可以在JVM上運行,擁有了Java語言的一切優點,且支持GPU和大數據組建集成,不用擔心性能和可擴展性。
  • 由于是小白,需要進行基礎知識的補充,這里整理一下分享給大家。

2.簡介

Deeplearning4j是當前最大、最流行的基于JAVA的深度學習框架,正式誕生于2013年,在2017年加入Eclipse基金會,由美國的Skymind開源并維護。

  • 支持神經網絡模型的構建、模型訓練和部署;
  • 能夠與現有大數據生態進行無縫銜接(Hadoop、Spark等),也是可以原生態支持分布式模型訓練的框架之一;
  • 支持多線程;
  • 跨平臺(硬件:CUDA GPU,x86,ARM,PowerPC;操作系統:Windows/Mac/Linux/Android)。

小結一下:模型構建、模型訓練和部署一條龍,兼容性強,多線程,跨平臺(特別注意Android平臺,支持端側模型)?

3.組件

Deeplearning4j實際上是一堆項目,旨在支持基于 JVM 的深度學習應用程序的所有需求。除了 Deeplearning4j 本身(高級 API),它還包括:

  • Deeplearning4j/ScalNet:JVM和Spark上運行神經網絡構建、訓練和部署的基礎框架庫;
  • ND4J/libND4J:支持CPU/GPU加速的高性能數值計算庫,可以說是JVM上的Numpy;
  • SameDiff:用于符合微分和計算圖庫;
  • DataVec:數據處理庫,提供采樣、過濾、變換等操作;
  • Arbiter:神經網絡超參數搜索和優化庫;
  • RL4J:JVM上的強化學習庫;
  • Model Import:模型導入庫,可以導入ONNX,TensorFlow,Keras(Caffe)模型;
  • Jumpy:ND4J對應Python語言API;
  • Python4j:可以在JVM里運行Python腳本語言。

dl4j-0.jpg
dl4j-3.jpg

3.1 Deeplearning4j/ScalNet

  1. 前向神經網絡(Feedforward Neural Networks, FNN)
  2. 自動編碼器(AutoEncoders)
  3. 卷積神經網絡(Convolutional Neural Networks, CNN)
  4. 循環神經網絡(Recurrent Neural Networks ,RNN)
  5. 生成對抗網絡(Generative Adversarial Networks)
  6. 遞歸神經網絡(Recursive Neural Network )
  7. 深度信念網絡(Deep Belief Networks)和受限制玻爾茲曼機(Restricted Boltzmann Machines)
  8. 圖神經網絡(Graph Neural Networks)

dl4j-1.jpg

3.1.1 Deeplearning4jf(Java)

神經網絡高層API庫,用于構建具有各種層的多層神經網絡(MultiLayerNetworks)和計算圖(ComputationGraphs),支持從其他框架導入模型和在Apache Spark上進行分布式訓練

3.1.2 ScalNet(Scala)

ScalNet是受Keras啟發而為Deeplearning4j開發的Scala語言包裝。它通過Spark在多個GPU上運行。功能相當于Keras。
Keras是一個由Python編寫的開源人工神經網絡庫,可以作為Tensorflow、Microsoft-CNTK和Theano的高階應用程序接口,進行深度學習模型的設計、調試、評估、應用和可視化。

3.2 ND4J/LibND4J

ND4J是Deeplearning4j的數值處理庫和張量庫,在JVM中實現Numpy的功能:

  • Java科學運算引擎,用來驅動矩陣操作;
  • JavaCPP功能: Java 到 Objective-C 的橋,可像其他 Java 對象一樣來使用 Objective-C 對象;
  • CPU 后瑞:OpenMP、OpenBlas 或 MKL、與SIMD的擴展;
  • GPU 后瑞:最新CUDA 及 CuDNN。

包含500多種數學、線性代數和神經網絡操作。

3.3 SameDiff

SameDiff是具有自動微分功能的張量計算庫,其自動微分方法是基于靜態圖的方法,提供神經網絡運算中更為底層的接口,主要用于自定義神經網絡拓撲結構。
另外,SameDiff支持導入Tensorflow凍結模型格式的.pd(protobuf)模型。對ONNX、TensorFlow SaveModel和Keras模型的導入正在完善中。可以簡單的認為SameDiff和DL4J的關系類似于Tensorflow和Keras。
符合微分和計算圖庫是深度學習中的兩個關鍵概念:

  1. 符合微分(Automatic Differentiation,簡稱AD)
  • 符合微分是一種計算梯度的技術,用于優化神經網絡中的參數。
  • 在神經網絡訓練過程中,我們需要計算損失函數對模型參數的梯度,以便使用梯度下降等優化算法來更新參數。
  • 符合微分通過構建計算圖并自動計算每個節點的梯度,使得梯度計算變得高效且不容易出錯。
  • 常見的深度學習框架(如TensorFlow、PyTorch和Deeplearning4j)都使用符合微分來實現反向傳播算法。
  1. 計算圖庫
  • 計算圖是一種表示復雜計算過程的圖結構,其中節點表示操作(例如加法、乘法、激活函數等),邊表示數據流。
  • 計算圖庫用于構建、管理和執行計算圖。
  • 在深度學習中,計算圖用于描述神經網絡的前向傳播和反向傳播過程。

3.4 DataVec

神經網絡專門處理多維數組形式的數值數據。DataVec可以將來自一個CSV文件或一批圖像的數據序列化,轉換為數值數組。數據的攝取、清理、聯接、縮放、標準化和轉換是開展任何類型的數據分析時都必須完成的工作。是深度學習的先決條件。DataVec是專為這一流程設計的工具包。數據科學家和開發人員可以用其中的工具將圖像、視頻、聲音、文本和時間序列等原始數據轉變為特征向量,輸入神經網絡。

  • 數據的的 ETL (抽取、轉換、裝載)和向量化;
  • DataVec幫助克服機器學習及深度學習實現過程中最重大的障礙之一:將數據轉化為神經網絡能夠識別的格式;
  • DataVec使用Apache Spark來進行轉換運算。

整體流程如下:

image.png
同時,DataVec也支持所有主要類型的輸入(CSV、文本、圖像、音頻、視頻和數據庫)整體流程如下:


除了明顯提供經典數據格式的讀取器,DataVec還提供了一個接口用來攝取特定的自定義數據。

3.5 Arbiter

Arbiter幫助您搜索超參數空間,為神經網絡尋找最理想的參數組合及架構。這非常重要,因為尋找恰當的架構和超參數是一個很大的組合問題。來自微軟研發部等企業實驗室的ImageNet大賽獲勝團隊正是通過搜索超參數空間才得出了ResNet這樣的150層神經網絡:

  • 深度學習模型檢測、評估器;
  • 調整及優化機器學習模型;
  • 使用Grid search和Random Search 作超參數尋優;
  • arbiter-core:Aribter-core用網格搜索等算法來搜索超參數空間。它會提供一個GUI界面。
  • arbiter-deeplearning4j:Arbiter可以同DL4J模型互動。在進行模型搜索時,您需要能運行模型。這樣可以對模型進行試點,進而找出最佳的模型。

3.6 RL4J

RL4J是在Java中實現深度Q學習、A3C及其他強化學習算法的庫和環境,與DL4J和ND4J相集成。

4.總結

簡而言之,Deeplearning4j 能夠讓你從各類淺層網絡(其中每一層在英文中被稱為layer)出發,設計深層神經網絡。這一靈活性使用戶可以根據所需,在分布式、生產級、能夠在分布式 CPU 或 GPU 的基礎上與 Spark 和 Hadoop 協同工作的框架內,整合受限玻爾茲曼機、其他自動編碼器、卷積網絡或遞歸網絡。此處為我們已經建立的各個庫及其在系統整體中的所處位置:

dl4j-4.jpg

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718332.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718332.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718332.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis--線程模型詳解

Redis線程模型 Redis內部使用的文件事件處理器(基于Reactor模式開發的)file event handler是單線程的,所以Redis線程模型才叫單線程模型,它采用IO多路復用機制同時監聽多個socket,當被監聽的socket準備好執行accep、r…

072:vue+cesium 實現下雪效果

第072個 點擊查看專欄目錄 本示例的目的是介紹如何在vue+cesium中實現下雪效果,這里使用著色器來實現實例特效。 直接復制下面的 vue+cesium源代碼,操作2分鐘即可運行實現效果. 文章目錄 示例效果配置方式示例源代碼(共120行)著色代碼實現心得:專欄目標示例效果

Python世界之附加

一、數據類型轉換 1.隱式類型轉換 在隱式類型轉換中,Python 會自動將一種數據類型轉換為另一種數據類型。 對兩種不同類型的數據進行運算,較低數據類型就會轉換為較高數據類型以避免數據丟失。 2.顯式類型轉換 在顯式類型轉換中,用戶將對…

Linux設置靜態IP地址

在Linux系統中設置靜態IP地址的步驟如下: 1.使用管理員權限登錄系統。 2.編輯網卡配置文件: 網卡配置文件通常位于 /etc/sysconfig/network-scripts/ 目錄下,可以使用命令 cd /etc/sysconfig/network-scripts 切換到該目錄。 …

Wifi技術知識

參考文章 https://www.163.com/dy/article/FDFT60T70550I80C.html https://www.zhihu.com/tardis/bd/art/485711752?source_id1001 wifi代數 以前大家看電腦手機路由器參數,WiFi都是802.11a/b/n/g/ac/ax,這學名讀起來有些麻煩,現在好了&…

第12屆智能計算與無線光通信國際會議(ICWOC 2024)即將召開!

2024年第12屆智能計算與無線光通信國際會議(ICWOC 2024)將于2024年6月21-23日在中國重慶召開。隨著深度學習等人工智能技術的不斷進步,以自動化、自治為特征的智能應用預計將激增。本屆會議主題為“光通信智能鏈接”,旨在為相關技…

ubuntu環境下docker容器詳細安裝使用

文章目錄 一、簡介二、ubuntu安裝docker1.刪除舊版本2.安裝方法一3. 安裝方法二(推薦使用)4.運行Docker容器5. 配置docker加速器 三、Docker鏡像操作1. 拉取鏡像2. 查看本地鏡像3. 刪除鏡像4. 鏡像打標簽5. Dockerfile生成鏡像 四、Docker容器操作1. 獲取…

Qt | TCP服務器端框架搭建

文章目錄 server.hserver.cppmain.cpptcpclientsocket.htcpclientsocket.cpptcpserver.htcpserver.cpp提示運行QTcpServer 是 Qt 框架中的一個類,用于實現 TCP 服務器。它提供了一種方便的方式來創建和管理 TCP 服務器,以便與客戶端進行通信。QTcpServer 類屬于 QtNetwork 模…

Webserver(1): C++實現線程池

在實現線程池之前,首先對線程池中所需要用到的互斥鎖、條件變量和信號量進行了簡單的封裝。 互斥鎖、條件變量和信號量封裝 locker.h頭文件如下(已詳細注釋) /* 這里面對互斥鎖,條件變量和信號量進行了封裝 保證工作隊列的線程…

微服務架構的流行框架之:Dubbo Spring Cloud

Dubbo Dubbo是一個高性能、輕量級的開源Java RPC(Remote Procedure Call,遠程過程調用)框架,由阿里巴巴開發并貢獻給了Apache基金會,成為Apache的頂級項目。Dubbo提供了RPC通信和服務治理的解決方案,使得構…

深入理解C語言中的變量和常量

變量和常量 1. 前言2. 預備知識2.1 printf和%d2.2 \n2.3 scanf2.4 scanf在vs中報錯2.5 extern2.6 數組的初始化 3. 變量和常量的區別4. 變量4.1 定義變量的方法4.2 變量的分類4.2.1 局部優先 4.3 變量的使用4.4 變量的作用域4.4.1 局部變量的作用域4.4.2 全局變量的作用域 4.5 …

機器學習|KNN和Kmeans

KNN和Kmeans KNN KNN-K個最近的鄰居,而K是可人先預設出來的。 所謂近朱者赤,近墨者黑。 可以選取離當前最近的K個樣本來作為輔助判斷,因為本樣本和最近的K個樣本應該是處于一種相似的狀態。 以下是一個蘋果和梨的識別任務。 圖上會出現一個未…

深入Spring Boot核心技術:代碼實戰解析

第一章:揭開Spring Boot自動配置的面紗 自動配置原理 讓我們首先通過一個簡化的Spring Boot應用啟動類來直觀感受自動配置的工作原理: java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.Sprin…

【軟件設計師】通俗易懂的去了解算法的時間復雜度

🐓 時間復雜度 常用排序的時間復雜度 時間頻度 算法需要花費的時間,和它語句執行的次數是成正比的,所以會把一個算法種語句執行次數稱為語句頻度和時間頻度、記作T(n)。 定義 時間復雜度就是找到一個無限接近時間頻度T(n)同數量級的函數&am…

小腦萎縮患者生活指南:守護你的每一步

親愛的讀者朋友們,今天我們要聊一聊一個特殊但非常重要的群體——小腦萎縮患者。在這個充滿挑戰的旅程中,我們將一起探索如何用愛和智慧為患者打造一個更加安全、舒適的生活環境。 小腦萎縮是指小腦細胞逐漸減少,導致小腦體積縮小的一種病癥…

全量知識系統問題及SmartChat給出的答復 之16 幣圈生態鏈和行為模式

Q.42 幣圈生態鏈和行為模式 我認為,上面和“幣”有關的一系列概念和技術,按設計模式的劃分 ,整體應該都屬于行為模式,而且應該囊括行為模式的所有各個方面。 而行為又可以按照三種不同的導向(以目的或用途為導向、過…

互聯網摸魚日報(2024-03-04)

互聯網摸魚日報(2024-03-04) 36氪新聞 Sora來了,你又焦慮了嗎? 最前線|安踏首家球鞋集合店落地北京三里屯 一位中國遙感科學家,決定“跨界”拯救瀕危動物野駱駝 | 最前線 本周雙碳大事:工信部等七部門發文推動制造…

mirthConnect忽略HTTPS SSL驗證

mirthConnect SSL忽略驗證 1、下載https網站證書 點擊不安全---->證書無效 2、查看mirth 秘鑰庫口令 在mirthConnect 的conf目錄下面keystore.storepass 3、導入證書到本地 在jdk的bin目錄下面執行 keytool -importcert -file "下載的網站證書路徑" -keysto…

LeetCode每日一題【c++版】- leetcode 225.用隊列實現棧

題目描述 請你僅使用兩個隊列實現一個后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、pop 和 empty)。 實現 MyStack 類: void push(int x) 將元素 x 壓入棧頂。int pop() 移除并返回棧頂元素…

Python中按指定數量分割列表字符串的方法

引言 處理列表數據時,有時我們需要將一個包含長字符串的列表分割成按照特定長度的小字符串的多個列表。這在文本處理、批量數據處理或者當我們需要將數據分塊進行并行處理時非常常見。Python作為一個強大的編程語言,提供了很多方便的方法來實現這一功能…