神经网络配置中的每一层表示隐藏单元的单元。当层堆叠在一起时,它们代表了一个深度神经网络。
在Eclipse DL4J中可用的所有层都可以用在多层网络或计算图中。当配置一个神经网络时,你传递层配置,网络会为你实例化该层。
如果你正在配置诸如InceptionV4之类的复杂网络,则需要使用计算图API,并使用顶点将不同的分支连接在一起。检查顶点以获取更多信息。
[源码]
激活层是一个简单的层,它将指定的激活函数应用到输入激活中。
clone
public ActivationLayer clone()
activation
public Builder activation(String activationFunction)
层激活函数,典型的值包括:
“relu” (校正线性), “tanh”, “sigmoid”, “softmax”, “hardtanh”, “leakyrelu”, “maxout”, “softsign”, “softplus”
activation
public Builder activation(IActivation activationFunction)
activation
public Builder activation(Activation activation)
[源码]
密连层: 标准全连接前馈层
hasBias
public Builder hasBias(boolean hasBias)
如果为 true (默认): 包括模型偏置参数。false: 没有偏置。
[源码]
丢弃层。此层仅在训练时应用丢弃,并在测试时通过未修改层传递激活。
build
public DropoutLayer build()
用指定的保留输入激活概率创建一个丢弃层 {- link Dropout}, with the specified probability of retaining the input activation. 详见 {- link Dropout}
[源码]
嵌入层:前馈层,它期望每个示例的单个整数作为输入(类号,在0到numClass-1的范围内),从数学上说,嵌入层等效于对输入使用一个具有one-hot表示的密连层;但是,与大量的类(作为一个密连层+one-hot输入,一个矩阵乘以所有,但一个值为零)一起,它可以更加有效。
注意: 只能用作网络的第一层
注意 2: 对于给定的示例索引i,输出是activationFunction(weights.getRow(i) + bias),因此可以将权重行视为每个示例的向量/嵌入。
还要注意,嵌入层具有激活函数(IDENTITY设置为禁用)和可选的偏置(默认情况下禁用)
hasBias
public Builder hasBias(boolean hasBias)
如果为 true (默认): 包括层偏置参数。false: 没有偏置。
[源码]
序列嵌入层:前向层,它期望每个示例的固定长度整数/索引数(输入长度)作为输入,范围从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: 没有偏置。
inputLength
public Builder inputLength(int inputLength)
设置此嵌入层的输入序列长度。
inferInputLength
public Builder inferInputLength(boolean inferInputLength)
设置嵌入层的输入序列推理模式。
[源码]
全局池化层-用于在时间上对RNNs进行池化,以及用于CNNs的2D池化。
当处理可变长度的输入时,全局池化层也可以处理掩模阵列。掩模阵列被假定为2D,并且在训练中或训练后通过网络向前馈送:
默认设置的行为:
或者,通过在配置中设置collapseDimensions=false,可以将简化维度保留为1s:这给出了
poolingDimensions
public Builder poolingDimensions(int... poolingDimensions)
池化维度。注意: 大多数情况下,这不需要设置,并且可以使用默认值。默认的RNN数据:池化维度2(时间)。CNN数据的默认值:池化维度2,3(高度和宽度)CNN3D数据的默认值:池化维度2,3,4(深度、高度和宽度)
poolingType
public Builder poolingType(PoolingType poolingType)
collapseDimensions
public Builder collapseDimensions(boolean collapseDimensions)
在池化时是否折叠维度。通常你想这样做。默认值:true。如果是true:
如果是 false:
5d (CNN3D)输入带有形状 [miniBatchSize, channels, depth, height, width] -> 2d 输出 [miniBatchSize, channels, 1, 1, 1]
pnorm
public Builder pnorm(int pnorm)
p-范数常数。仅为池化类型使用{- link PoolingType#PNORM}时使用。
[源码]
本地响应归一化层
查看3.3章节 http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf
k
public Builder k(double k)
LRN度量常数 k. 默认为 : 2
n
public Builder n(double n)
在执行LRN时使用的相邻内核映射的数目。默认值:5
alpha
public Builder alpha(double alpha)
LRN度量常数alpha。默认为: 1e-4
beta
public Builder beta(double beta)
度量常数beta。 默认为: 0.75
[源码]
一维本地连接的SameDiff版本
nIn
public Builder nIn(int nIn)
nOut
public Builder nOut(int nOut)
activation
public Builder activation(Activation activation)
kernelSize
public Builder kernelSize(int k)
stride
public Builder stride(int s)
padding
public Builder padding(int p)
convolutionMode
public Builder convolutionMode(ConvolutionMode cm)
dilation
public Builder dilation(int d)
hasBias
public Builder hasBias(boolean hasBias)
setInputSize
public Builder setInputSize(int inputSize)
为一维本地连接层设置输入滤波器大小
[源码]
二维本地连接的SameDiff版本
nIn
public Builder nIn(int nIn)
nOut
public Builder nOut(int nOut)
activation
public Builder activation(Activation activation)
kernelSize
public Builder kernelSize(int... k)
stride
public Builder stride(int... s)
padding
public Builder padding(int... p)
convolutionMode
public Builder convolutionMode(ConvolutionMode cm)
dilation
public Builder dilation(int... d)
hasBias
public Builder hasBias(boolean hasBias)
setInputSize
public Builder setInputSize(int... inputSize)
为二维本地连接层设置输入滤波器大小(h,w)
[源码]
损失层是在没有MLP逻辑的输入上执行损失函数的灵活输出层。但损失层没有任何参数。因此,不支持设置nIn/nOut ,输出大小与输入激活大小相同。
public Builder(LossFunctions.LossFunction lossFunction)
[源码]
通过基于标签和指定损失函数的反向传播训练的输出层。可以被配置为分类和回归。注意输出层具有参数-它包含一个内部完全连接的层(有效地包含一个密连层)。这允许输出大小与层输入大小不同。
build
public Builder(LossFunction lossFunction)
[源码]
支持这些池化类型: MAX, AVG, SUM, PNORM, NONE
[源码]
支持这些池化类型: MAX, AVG, SUM, PNORM, NONE
[源码]
一维(临时的)子采样层-也被称为池层。
支持这些池化类型: MAX, AVG, SUM, PNORM
[源码]
一维向上采样层
示例:
如果输入(对于单个示例,具有向下页通道,以及从左到右的顺序)是:
[ 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
public Builder size(int[] size)
使用单个元素进行上采样大小的 int数组。数组长度必须为1
[源码]
二维向上采样层
按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
public Builder size(int[] size)
向上采样大小数组
[源码]
三维向上采样层
通过size[0], size[1] 和 size[2]重复每个值(每个 x/y/z位置的所有通道值)
size
public Builder size(int size)
向上采样大小为整数,因此相同的向上采样大小用于深度、宽度和高度。
size
public Builder size(int[] size)
向上采样大小为整数数组,因此相同的向上采样大小用于深度、宽度和高度。
[源码]
卷积神经网络的一维零填充层。允许顶部和底部做单独的填充。
build
public ZeroPadding1DLayer build()
[源码]
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()
[源码]
卷积神经网络(2D CNNs)的零填充层。允许对顶部/底部/左侧/右侧分别进行填充。
build
public ZeroPaddingLayer build()
[源码]
getMemoryReport
public LayerMemoryReport getMemoryReport(InputType inputType)
这是一个给定层估计的内存消耗报告。
[源码]
重复向量层配置
重复向量取一小批形状(mb, length)和重复因子n,输出形状是一个三维张量(mb, n, length),其中x被重复n次。
repetitionFactor
public Builder repetitionFactor(int n)
为重复向量层设置重复因子
[源码]
用于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
lambbaNoObj
public Builder lambbaNoObj(double lambdaNoObj)
由损失函数组成的用于“无目标自信度”的损失函数系数。默认为0.5
lossPositionScale
public Builder lossPositionScale(ILossFunction lossPositionScale)
由损失函数组成的用于位置/比例的损失函数
lossClassPredictions
public Builder lossClassPredictions(ILossFunction lossClassPredictions)
分类预测的损失函数-缺省为L2损失(即,平方误差之和,根据论文),但是也可以使用损失MCXENT。(这对于分类更为常见)。
boundingBoxPriors
public Builder boundingBoxPriors(INDArray boundingBoxes)
边界框先验维数[宽度,高度]。对于n个边界框,输入具有形状 [rows, columns] = [N, 2] 注意,维度应指定为网格大小的分数。例如,具有13x13输出的网络,值1.0将对应于一个网格单元;值13将对应于整个图像。
[源码]
掩码层将掩码阵列应用于正向传播激活,以及通过该层的反向传播梯度。它可以与2D(前馈)、3D(时间序列)或4D(CNN)激活一起使用。
[源码]
等于指定掩码值(0默认)的激活与掩码时间步的包装器。假设输入形状为 [batch_size, input_size, timesteps]。