1. 程式人生 > >DL4J中文文件/模型/層

DL4J中文文件/模型/層

什麼是層?

神經網路配置中的每一層表示隱藏單元的單元。當層堆疊在一起時,它們代表了一個深度神經網路。

使用層

在Eclipse DL4J中可用的所有層都可以用在多層網路或計算圖中。當配置一個神經網路時,你傳遞層配置,網路會為你例項化該層。

層VS頂點

如果你正在配置諸如InceptionV4之類的複雜網路,則需要使用計算圖API,並使用頂點將不同的分支連線在一起。檢查頂點以獲取更多資訊。

通用層


ActivationLayer (啟用層)

[原始碼]

啟用層是一個簡單的層,它將指定的啟用函式應用到輸入啟用中。

clone

public ActivationLayer clone() 
  • 引數 activation 用於層的啟用函式

activation

public Builder activation(String activationFunction) 

層啟用函式,典型的值包括:
“relu” (校正線性), “tanh”, “sigmoid”, “softmax”, “hardtanh”, “leakyrelu”, “maxout”, “softsign”, “softplus”

  • 棄用     使用{- link #activation(Activation)} 或 {- link - activation(IActivation)}

activation

public Builder activation(IActivation activationFunction) 
  • 引數 activationFunction 用於層的啟用函式

activation

public Builder activation(Activation activation) 
  • 引數 activation 用於層的啟用函式

DenseLayer (密連層)

[原始碼]

密連層: 標準全連線前饋層

hasBias

public Builder hasBias(boolean hasBias)

如果為 true (預設): 包括模型偏置引數。false: 沒有偏置。

  • 引數 hasBias如果 true: 包括模型偏置引數

DropoutLayer (丟棄層)

[原始碼]

丟棄層。此層僅在訓練時應用丟棄,並在測試時通過未修改層傳遞啟用。

build

public DropoutLayer build() 

用指定的保留輸入啟用概率建立一個丟棄層 {- link Dropout}, with the specified probability of retaining the input activation. 詳見  {- link Dropout} 

  • 引數 dropout 是啟用保留概率。

EmbeddingLayer(嵌入層)

[原始碼]

嵌入層:前饋層,它期望每個示例的單個整數作為輸入(類號,在0到numClass-1的範圍內),從數學上說,嵌入層等效於對輸入使用一個具有one-hot表示的密連層;但是,與大量的類(作為一個密連層+one-hot輸入,一個矩陣乘以所有,但一個值為零)一起,它可以更加有效。
注意: 只能用作網路的第一層
注意 2: 對於給定的示例索引i,輸出是activationFunction(weights.getRow(i) + bias),因此可以將權重行視為每個示例的向量/嵌入。

還要注意,嵌入層具有啟用函式(IDENTITY設定為禁用)和可選的偏置(預設情況下禁用)

hasBias

public Builder hasBias(boolean hasBias)

如果為 true (預設): 包括層偏置引數。false: 沒有偏置。

  • 引數 hasBias如果 true: 包括層偏置引數

EmbeddingSequenceLayer (嵌入序列層)

[原始碼]

序列嵌入層:前向層,它期望每個示例的固定長度整數/索引數(輸入長度)作為輸入,範圍從0到numClasses-1。因此,該輸入具有形狀[ numExamples,inputLength]或形狀[numExamples, 1, inputLength]。

該層的輸出是3D(序列/時間序列),即形狀 [numExamples, nOut, inputLength]。注意:只能用作網路的第一個層。

注2:對於給定的示例索引i,輸出是activationFunction(weights.getRow(i) + bias),因此可以將權重行視為每個索引的向量/嵌入。

還要注意,嵌入層具有啟用函式(IDENTITY設定為禁用)和可選的偏置(預設情況下禁用)

hasBias

public Builder hasBias(boolean hasBias) 

如果為 true (預設): 包括層偏置引數。false: 沒有偏置。

  • 引數 hasBias如果 true: 包括層偏置引數

inputLength

public Builder inputLength(int inputLength) 

設定此嵌入層的輸入序列長度。

  • 引數 inputLength 為輸入序列長度
  • 返回 Builder

inferInputLength

public Builder inferInputLength(boolean inferInputLength) 

設定嵌入層的輸入序列推理模式。

  • 引數 inferInputLength 是否推斷輸入的長度
  • 返回Builder

GlobalPoolingLayer (全域性池化層)

[原始碼]

全域性池化層-用於在時間上對RNNs進行池化,以及用於CNNs的2D池化。

當處理可變長度的輸入時,全域性池化層也可以處理掩模陣列。掩模陣列被假定為2D,並且在訓練中或訓練後通過網路向前饋送:

  • 時間序列:掩碼陣列是形狀是 [miniBatchSize, maxTimeSeriesLength],並且僅包含0或1個值。
  • CNNs: 掩碼有形狀 [miniBatchSize, height] 或 [miniBatchSize, width]。 重要的是: 當前的實現假設 CNNs + 可變長度(掩碼), 輸入形狀是 [miniBatchSize, channels, height, 1] 或 [miniBatchSize, channels, 1, width] 。這是像CNN之類的結構進行全域性分類的句子分類。

預設設定的行為:

  • 3d (時間序列) 輸入帶有形狀 [miniBatchSize, vectorSize, timeSeriesLength] -> 2d 輸出 [miniBatchSize, vectorSize]
  • 4d (CNN) 輸入帶有形狀 [miniBatchSize, channels, height, width] -> 2d 輸出 [miniBatchSize, channels]
  • 5d (CNN3D) 輸入帶有形狀 [miniBatchSize, channels, depth, height, width] -> 2d 輸出 [miniBatchSize, channels]

或者,通過在配置中設定collapseDimensions=false,可以將簡化維度保留為1s:這給出了

  • [miniBatchSize, vectorSize, 1] 用於 RNN 輸出,
  • [miniBatchSize, channels, 1, 1] 用於 CNN 輸出, 並
  • [miniBatchSize, channels, 1, 1, 1] 用於 CNN3D 輸出.

poolingDimensions

public Builder poolingDimensions(int... poolingDimensions) 

池化維度。注意: 大多數情況下,這不需要設定,並且可以使用預設值。預設的RNN資料:池化維度2(時間)。CNN資料的預設值:池化維度2,3(高度和寬度)CNN3D資料的預設值:池化維度2,3,4(深度、高度和寬度)

  • 引數 poolingDimensions 用於池化的維度

poolingType

public Builder poolingType(PoolingType poolingType) 
  • 引數 poolingType 全域性池化型別

collapseDimensions

public Builder collapseDimensions(boolean collapseDimensions) 

在池化時是否摺疊維度。通常你想這樣做。預設值:true。如果是true:

  • 3d (時間系列) 輸入帶有形狀 [miniBatchSize, vectorSize, timeSeriesLength] -> 2d 輸出 [miniBatchSize, vectorSize]
  • 4d (CNN) 輸入帶有形狀 [miniBatchSize, channels, height, width] -> 2d 輸出 [miniBatchSize, channels]
  • 5d (CNN3D) 輸入帶有形狀 [miniBatchSize, channels, depth, height, width] -> 2d 輸出 [miniBatchSize, channels]

如果是 false:

  • 3d (時間系列) 輸入帶有形狀[miniBatchSize, vectorSize, timeSeriesLength] -> 3d 輸出 [miniBatchSize, vectorSize, 1]
  • 4d (CNN)輸入帶有形狀 [miniBatchSize, channels, height, width] -> 2d 輸出 [miniBatchSize, channels, 1, 1]
  • 5d (CNN3D)輸入帶有形狀 [miniBatchSize, channels, depth, height, width] -> 2d 輸出 [miniBatchSize, channels, 1, 1, 1]

  • 引數 collapseDimensions 是否摺疊維度

pnorm

public Builder pnorm(int pnorm) 

p-範數常數。僅為池化型別使用{- link PoolingType#PNORM}時使用。

  • 引數 pnorm p-範數常數

LocalResponseNormalization(本地響應歸一化)

[原始碼]

本地響應歸一化層
檢視3.3章節  http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf

k

public Builder k(double k) 

LRN度量常數 k. 預設為 : 2

  • 引數 k 是度量常數

n

public Builder n(double n) 

在執行LRN時使用的相鄰核心對映的數目。預設值:5

  • 引數 n 相鄰核心對映的數目

alpha

public Builder alpha(double alpha) 

LRN度量常數alpha。預設為: 1e-4

  • 引數 alpha 度量常數

beta

public Builder beta(double beta) 

度量常數beta。 預設為: 0.75

  • 引數 beta 度量常數

LocallyConnected1D (一維本地連線)

[原始碼]

一維本地連線的SameDiff版本

nIn

public Builder nIn(int nIn) 
  • 引數 nIn 輸入到層的數量(輸入大小)

nOut

public Builder nOut(int nOut) 
  •  引數 nOut 輸出數量(輸出大小)

activation

public Builder activation(Activation activation) 
  • 引數 activation 層啟用函式

kernelSize

public Builder kernelSize(int k) 
  • 引數  k 層的核大小

stride

public Builder stride(int s) 
  • 引數s 層步幅

padding

public Builder padding(int p) 
  • 引數 p 層填充。如果 {- link ConvolutionMode#Same} 被設定,則不使用。

convolutionMode

public Builder convolutionMode(ConvolutionMode cm) 
  • 引數 cm 層卷積模式 詳見 {- link ConvolutionMode}

dilation

public Builder dilation(int d) 
  • 引數 d 層膨脹係數

hasBias

public Builder hasBias(boolean hasBias)
  • 引數  hasBias 如果是 true (預設為false) 則層有偏置

setInputSize

public Builder setInputSize(int inputSize)

為一維本地連線層設定輸入濾波器大小

  • 引數 inputSize輸入濾波器的高度
  • 返回 Builder

LocallyConnected2D(二維本地連線)

[原始碼]

 二維本地連線的SameDiff版本

nIn

public Builder nIn(int nIn) 
  • 引數 nIn 輸入到層的數量(輸入大小)

nOut

public Builder nOut(int nOut) 
  • 引數 nOut 輸出數量(輸出大小)

activation

public Builder activation(Activation activation) 
  • 引數 activation 層啟用函式

kernelSize

public Builder kernelSize(int... k) 
  • 引數 k 層的核大小。必須是2個值(高度/寬度)

stride

public Builder stride(int... s) 
  • 引數 s 層步幅,必須是2個值(高度/寬度)

padding

public Builder padding(int... p) 
  • 引數 p 層填充。如果{- link ConvolutionMode#Same}被設定,則不使用。必須是2個值(高度/寬度)

convolutionMode

public Builder convolutionMode(ConvolutionMode cm) 
  • 引數 cm 層卷積模式 詳見 {- link ConvolutionMode}

dilation

public Builder dilation(int... d) 
  • 引數 d 層膨脹係數 。 必須是2個值(高度/寬度)

hasBias

public Builder hasBias(boolean hasBias)
  • 引數  hasBias 如果是 true (預設為false) 則層有偏置

setInputSize

public Builder setInputSize(int... inputSize)

為二維本地連線層設定輸入濾波器大小(h,w)

  • 引數 inputSize 這個層的輸入濾波器的高度和寬度對
  • 返回 Builder

LossLayer (損失層)

[原始碼]

損失層是在沒有MLP邏輯的輸入上執行損失函式的靈活輸出層。但損失層沒有任何引數。因此,不支援設定nIn/nOut ,輸出大小與輸入啟用大小相同。

public Builder(LossFunctions.LossFunction lossFunction)
  • 引數 lossFunction 層損失函式

OutputLayer (輸出層)

[原始碼]

通過基於標籤和指定損失函式的反向傳播訓練的輸出層。可以被配置為分類和迴歸。注意輸出層具有引數-它包含一個內部完全連線的層(有效地包含一個密連層)。這允許輸出大小與層輸入大小不同。

build

public Builder(LossFunction lossFunction)
  • 引數 lossFunction 層損失函式

Pooling1D (一維池化)

[原始碼]

支援這些池化型別: MAX, AVG, SUM, PNORM, NONE


Pooling2D (二維池化)

[原始碼]

支援這些池化型別: MAX, AVG, SUM, PNORM, NONE


Subsampling1DLayer (一維子取樣層)

[原始碼]

一維(臨時的)子取樣層-也被稱為池層。

支援這些池化型別: MAX, AVG, SUM, PNORM


Upsampling1D  (一維上向取樣)

[原始碼]

一維向上取樣層
示例:

如果輸入(對於單個示例,具有向下頁通道,以及從左到右的順序)是:
[ A1, A2, A3]
[ B1, B2, B3]
然後以size=2的輸出為:
[ A1, A1, A2, A2, A3, A3]
[ B1, B1, B2, B2, B3, B2]

size

public Builder size(int size) 

向上取樣大小 

  • 引數 size 一維層中的單一空間維度裡向上取樣大小

size

public Builder size(int[] size) 

 使用單個元素進行上取樣大小的 int陣列。陣列長度必須為1

  • 引數 size 一維層中的單一空間維度裡向上取樣大小

Upsampling2D (二維向上取樣)

[原始碼]

二維向上取樣層

按size[0]和size[1]次分別在高度和寬度維度重複每個值(或更確切地說,深度值集)。

示例:

輸入(一個示例和通道片段)
[ A, B ]
[ C, D ]
Size = [2, 2]
輸出(一個示例和通道片段)
[ A, A, B, B ]
[ A, A, B, B ]
[ C, C, D, D ]
[ C, C, D, D ]

size

public Builder size(int size) 

向上取樣大小整數,用於高和寬。

  • 引數 size 高度和寬度維度中的向上取樣大小

size

public Builder size(int[] size) 

向上取樣大小陣列

  • 引數 size 高度和寬度維度中的向上取樣大小

Upsampling3D (三維向上取樣)

[原始碼]

三維向上取樣層
通過size[0], size[1] 和 size[2]重複每個值(每個 x/y/z位置的所有通道值)

size

public Builder size(int size) 

向上取樣大小為整數,因此相同的向上取樣大小用於深度、寬度和高度。

  • 引數 size 深度、寬度和高度維度中的向上取樣大小

size

public Builder size(int[] size) 

向上取樣大小為整數陣列,因此相同的向上取樣大小用於深度、寬度和高度。

  • 引數 size 深度、寬度和高度維度中的向上取樣大小

ZeroPadding1DLayer (一維零填充層)

[原始碼]

卷積神經網路的一維零填充層。允許頂部和底部做單獨的填充。

build

public ZeroPadding1DLayer build() 
  • 引數 padding 對左右進行填充

ZeroPadding3DLayer(三維零填充層)

[原始碼]

Zero padding 3D layer for convolutional neural networks. Allows padding to be done separately for “left” and “right” in all three spatial dimensions.

卷積神經網路的三維零填充層。允許在所有三個空間維度分別進行“左”和“右”填充。

build

public ZeroPadding3DLayer build() 
  • 引數 padding 在所有三個空間維度中的左、右填充

ZeroPaddingLayer (零填充層)

[原始碼]

卷積神經網路(2D CNNs)的零填充層。允許對頂部/底部/左側/右側分別進行填充。

build

public ZeroPaddingLayer build() 
  • 引數 padHeight 底部和頂部填充
  • 引數 padWidth 左右填充

ElementWiseMultiplicationLayer (元素乘法層)

[原始碼]

  • w是nOut長度的一個可學習的權重向量
  • ”.”是元素乘法
  • b 是一個偏置向量

    注意,元素層的輸入和輸出大小對於該層是相同的。

 

getMemoryReport

public LayerMemoryReport getMemoryReport(InputType inputType) 

這是一個給定層估計的記憶體消耗報告。

  • 引數 inputType 層的輸入型別。記憶體消耗通常是輸入型別的函式。
  • 返回層記憶體報告

RepeatVector (重複向量)

[原始碼]

重複向量層配置

重複向量取一小批形狀(mb, length)和重複因子n,輸出形狀是一個三維張量(mb, n, length),其中x被重複n次。

repetitionFactor

public Builder repetitionFactor(int n) 

為重複向量層設定重複因子

  • 引數 n 高度和寬度維度中的向上取樣大小

Yolo2OutputLayer

[原始碼]

 用於YOLOv2 目標檢測模型的輸出 (損失) 層, 基於論文: YOLO9000: Better, Faster, Stronger - Redmon & Farhadi (2016) - https://arxiv.org/abs/1612.08242

你只看一次: 統一實時目標檢測 - Redmon et al. (2016) - http://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Redmon_You_Only_Look_CVPR_2016_paper.pdf
這種損失函式的實現是基於YOLOv2版本的論文。但是,請注意,它目前不支援在YOlO9000文章中描述的檢測和分類資料集上同時進行訓練。

注意:Yolo2OutputLayer 應該有此形狀: [minibatch, b(5+c), H, W], 其中:
b = 邊界框的數量(由配置決定-見詳細的論文)
c = 分類數量
H = 輸出/標籤  高度
W = 輸出/標籤 寬度

重要:在實踐中,這意味著在Yolo2OutputLayer之前的最後一個卷積層應該具有b(5+c)深度的輸出。因此,如果更改邊界框的數量,或者更改目標分類的數量,則通道的數量(最後一個卷積層的nOut)也需要更改。
標籤格式: [minibatch, 4+C, H, W]
標籤深度順序: [x1,y1,x2,y2,(分類標籤)]
x1 = 左上角位置
y1 = 如上, y 軸
x2 = 邊框右下角位置
y2 =如上y 軸


注意:標籤被表示為網格大小的倍數-對於13x13網格,(0,0)是左上角,(13,13)是右下角。

還要注意,掩碼陣列不是必須的——這個實現從類標籤(如果存在物件,則應該是1-hot,否則應該是0)推斷每個網格單元中是否存在物件。

 

lambdaCoord

public Builder lambdaCoord(double lambdaCoord)

 

用於位置和大小/比例的損失函式係數由損失函式組成。預設為5

  • 引數 lambdaCoord 由損失函式組成的用於大小/比例的Lambda值

lambbaNoObj

public Builder lambbaNoObj(double lambdaNoObj)

 

由損失函式組成的用於“無目標自信度”的損失函式係數。預設為0.5

  • 引數 lambdaNoObj 由損失函式組成的用於“無目標自信度”的Lambda值

lossPositionScale

public Builder lossPositionScale(ILossFunction lossPositionScale)

由損失函式組成的用於位置/比例的損失函式

  • 引數 lossPositionScale 用於位置/比例的損失函式

lossClassPredictions

public Builder lossClassPredictions(ILossFunction lossClassPredictions)

分類預測的損失函式-預設為L2損失(即,平方誤差之和,根據論文),但是也可以使用損失MCXENT。(這對於分類更為常見)。

  • 引數 lossClassPredictions 由YOLO損失函式組成的用於分類預測錯誤的損失函式

boundingBoxPriors

public Builder boundingBoxPriors(INDArray boundingBoxes)

邊界框先驗維數[寬度,高度]。對於n個邊界框,輸入具有形狀 [rows, columns] = [N, 2] 注意,維度應指定為網格大小的分數。例如,具有13x13輸出的網路,值1.0將對應於一個網格單元;值13將對應於整個影象。

  • 引數 boundingBoxes 邊界框先驗維數 (width, height)

MaskLayer (掩碼層)

[原始碼]

掩碼層將掩碼陣列應用於正向傳播啟用,以及通過該層的反向傳播梯度。它可以與2D(前饋)、3D(時間序列)或4D(CNN)啟用一起使用。


MaskZeroLayer (零掩碼層)

[原始碼]

等於指定掩碼值(0預設)的啟用與掩碼時間步的包裝器。假設輸入形狀為 [batch_size, input_size, timesteps]。