什么是层?
神经网络配置中的每一层表示隐藏单元的单元。当层堆叠在一起时,它们代表了一个深度神经网络。
使用层
在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]。