Deeplearning4j技術介紹

氧化氢 2024-04-12 22:48 16次浏览 0 条评论 taohigo.com

Deeplearning 4j概覽

Deeplearning4j當前最大、最流行的基於JAVA的深度學習框架,截止目前,社區人數為4900+,擁有11800+顆星,160000+的下載量。Deeplearning4j正式誕生於2013年,在2017年加入Eclipse基金會,由美國的Skymind開源並維護。

– 支持神經網絡模型的構建、模型訓練和部署

– 能夠與現有大數據生態進行無縫銜接(Hadoop、Spark等),也是可以原生態支持分佈式模型訓練的框架之一

– 支持多線程

– 跨平臺(硬件:CUDA GPu,x86,ARM,PowerPC;操作系統:Windows/Mac/Linux/Android)

Deeplearning主要組件

– 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腳本語言

下面,我們將對幾個主要的組件進行具體介紹。

nd4j

  • ND4J中常用的類
  1. ND4J中的NDArray使用示例
  • 創建NDArray對象

Nd4j.zeros(int nRows,int nCols)

Nd4j.create(float [],int int[])

  • 獲取屬性

尺寸:arr.size(i),長度:arr.length(),行:arr.rows()

  • 運算(加減乘除…)

arr.add(myDouble);arr.sub(myDouble);arr.mul(myDouble);arr.di v(myDouble);Nd4j.sort(Array,0,true)

  • 規約操作

arr.normal(),arr.prod()

  • 矩陣操作

arr.transpose();arr.Reshape(…);

Nd4j.toFlattened(arr)

SameDiff

SameDiff是具有自動微分功能的張量計算庫8,其自動微分方法是基於靜態圖的方法,提供神經網絡運算中更為底層的接口,主要用於自定義神經網絡拓撲結構。

使用示例如下:

另外,SameDiff支持導入Tensorflow凍結模型格式的.pd(protobuf)模型。對ONNX、TensorFlow SaveModel和Keras模型的導入正在完善中。我們可以簡單的認為SameDiff和DL4J的關系類似於Tensorflow和Keras。

Datavec

DataVec是一個用於機器學習ETL(提取、轉換、加載)操作的庫,目的是將原始數據轉化為可用的向量格式,從而將其輸入到機器學習算法中。

整體流程如下:

同時,DataVec也支持所有主要類型的輸入(CSV、文本、圖像、音頻、視頻和數據庫)

整體流程如下:

除瞭明顯提供經典數據格式的讀取器,DataVec還提供瞭一個接口。因此,如果你想攝取特定的自定義數據,你就不必構建整個管道。你隻需要編寫第一步就可以瞭。例如,如果你通過API描述你的數據如何符合符合接口的通用格式,DataVec將為每條記錄返回一個可寫列表。你會在相應的模塊中找到更多關於API的細節。你可以用DataVec做的另一件事是數據清洗。比方說,你不是擁有幹凈的、隨時可以使用的數據,而是從不同形式或不同來源的數據開始。您可能需要進行采樣、過濾,或者在現實世界中準備數據所需的幾個令人難以置信的混亂的ETL任務。DataVec提供瞭過濾器和轉換,幫助你策劃、準備和處理數據。它利用Apache Spark來大規模地完成這些任務。最後,DataVec為您的列式數據跟蹤一個模式,跨越所有轉換。該模式會通過探測進行主動檢查,如果您的數據與模式不匹配,DataVec會引發異常。您也可以指定過濾器:例如,您可以將正則表達式附加到類型為String的輸入列中,DataVec將隻保留符合該過濾器的數據。

DataVec使用示例:

Deeplearning4j

神經網絡高層API庫,用於構建具有各種層的MultiLayerNetworks和ComputationGraphs,支持從其他框架導入模型和在Apache Spark上進行分佈式訓練。

Deeplearning主要類

Layer

● Feedforward Layers

● Output Layers

● Convolutional Layers

● Recurrent Layers

● Unsupervised Layers

● …

Configuration

● Activation Functions

● Weight Initialization

● Updaters (Optimizers)

● Learning Rate Schedules

● Regularization

○ L1/L2 regularization

○ Dropout

○ Weight Noise

○ Constraints

Deeplearing示例:

Deeplearning技術棧與工作流

Deeplearning4j技術棧

Deeplearning可視化界面:

Konduit

Konduit 是一個專註於將機器學習工作流部署到生產環境中的服務系統和框架,核心概念是PipelineStep(工作流步驟 )。

Konduit-旨在使模型開發和部署更加高效和易用

Konduit與其他部署方式的比較

另外,Konduit支持多種輸入和輸出數據格式,如:numpy、Json、ND4J 圖片、ARROW。

Konduit工作流水線步驟(Pipeline steps)

Konduit框架結構

使用Konduit部署MNIST模型示例

一:將工作流水線參數寫入配置文件

1、輸入、輸出數據類型和格式

tf_minist.yaml

2、流水線步驟

二:啟動konduit服務

命令行方式:konduit serve –config tf_mnist.yaml -id server

三:Konduit可視化監控

● Konduit推行的現代化的可視化標準,用於監控在服務器端從GPU到推理時段的一切行為。

● Konduit支持可視化應用程序,如Grafana (該程序支持數據可視化領域的Prometheus 標準)。