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]。