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

猜你喜欢

转载自blog.csdn.net/bewithme/article/details/83752351