NeuralNetConfiguration类

DL4J神经网络构建器基础

DL4J中的所有神经网络均以NeuralNetConfiguration构建器为基础创建。该对象极其灵活,无论您需要实现什么类型的神经网络层,几乎都可以通过它来构建。这个类的参数组合及配置可用于设定不同类型的层,包括受限玻尔兹曼机(RBM)、深度置信网络(DBN)、卷积神经网络(CNN)、自动编码器等。各项参数及其默认设置的说明如下:

开始构建单个层的Java类的方法:

NeuralNetConfiguration conf = new NeuralNetConfiguration.Builder()

您可以用以下方式为这个类追加参数:

new NeuralNetConfiguration.Builder().iterations(100).layer(new RBM()).nIn(784).nOut(10)

参数:

  • activationFunctionstring,每个隐藏层节点的激活函数,
    • 默认 = “sigmoid”
    • 选项:
      • “abs”
      • “acos”
      • “asin”
      • “atan”
      • “ceil”
      • “cos”
      • “exp”
      • “floor”
      • “hardtanh”
      • “identity”
      • “maxout”
      • “negative”
      • “pow”
      • “relu”
      • “round”
      • “sigmoid”
      • “sign”
      • “sin”
      • “softmax”
      • “sqrt”
      • “stabilize”
      • “tahn”
      • 用nd4j.getExecutioner创建自定义函数
  • applySparsityboolean,有活动的二进制隐藏单元时使用
    • 默认 = false
  • batchint,输入神经网络的数据量
    • 默认 = 0
  • constrainGradientToUnitNormboolean,帮助梯度收敛,让损失变得更小、更平滑(避免梯度膨胀)
    • 默认 = false
  • convolutionTypeConvolutionLayer.ConvolutionType class,卷积层类型
    • 默认 = ConvolutionLayer.ConvolutionType.MAX
  • corruptionLeveldouble,对输入数据进行污染的程度
    • 默认 = 0.3
  • distDistribution class,权重初始化所用的分布
    • 默认 = new NormalDistribution(1e-3,1)
    • 选项:
      • NormalDistribution
      • UniformDistribution
      • BinomialDistribution
  • dropOutdouble,随机丢弃一定数量的活动单元/节点,将其置零(不激活)
    • 默认 = 0
  • featureMapSizeint[],卷积内核大小(也称为接受场)
    • 默认 = {2,2}
  • filterSizeint[],为降采样层创建张量数据结构 = 特征映射图数量(深度切片数量) x 通道数量 x 特征映射图空间(输入数据矩阵的行与列)
    • 默认 = {2,2,2,2}
    • 例如:5, 1, numRows, numColumns
    • 行 = 批次或总体的数据样本量;列 = 每个数据样本的特征数量
  • hiddenUnitRBM.HiddenUnit,RBM隐藏单元/节点类型
    • 默认 = RBM.HiddenUnit.BINARY
  • inputPreProcessor:(int, class) {层数, 数据处理器类} 对层的输入数据进行转换/预处理
    • 例如:.inputPreProcessor(0,new ConvolutionInputPreProcessor(numRows,numColumns))
    • 将2维张量转换为4维
    • 行 = 批次;列 = 输入数据点的数量
  • iterationsint,定型迭代次数
  • kint,RBM各层的预定型中,用马尔可夫链进行预测的对比散度算法的运行次数
    • 默认 = 1
  • kernelint[],内核大小(用于卷积网络)
    • 默认 = 5
  • l1double,L1正则化
    • 默认 = 0.0
  • l2double,L2正则化
    • 默认 = 0.0
  • layerLayer class,设定层的结构
  • lossFunctionLossFunctions class,作用于网络输出的误差变换函数
    • 默认 = LossFunctions.LossFunction.RECONSTRUCTION_CROSSENTROPY
    • 选项:
      • MSE
      • EXPLL
      • XENT
      • MCXENT
      • RMSE_XENT
      • SQUARED_LOSS
      • RECONSTRUCTION_CROSSENTROPY
      • NEGATIVELOGLIKELIHOOD
  • learningRateDouble,步幅,亦即在搜索空间中移动时改变参数向量的速度(学习速率越大,得到最终结果的速度越快,但有可能错过最佳值;速率较小,所需的定型时间可能会大幅增加) 优化函数的变化速率
    • 默认 = 1e-1f
  • minimizeboolean,设定目标是最小化还是最大化
    • 默认 = false
  • momentumdouble,动量,用于减少权重变化的波动
    • 默认 = 0.5
  • momentumAfterMap[Integer, Double] (n次迭代,动量)n次迭代之后的动量
  • nInint,输入数据点的数量
  • nOutint,输出节点数量
  • numIterationsint,网络定型的迭代次数
    • 默认 = 1000
  • numLineSearchIterationsint
    • 默认 = 100
  • optimizationAlgoOptimizationAlgorithm class,反向传播算法
    • 默认 = OptimizationAlgorithm.CONJUGATE_GRADIENT
    • 选项:
      • GRADIENT_DESCENT
      • CONJUGATE_GRADIENT
      • HESSIAN_FREE
      • LBFGS
      • ITERATION_GRADIENT_DESCENT
  • preProcessor:(int, class) {层数, 数据处理器类} 对层的输出数据进行转换/预处理
    • 例如:.preProcessor(0, new ConvolutionPostProcessor())
  • renderWeightsEveryNumEpochsint,每过几个epoch显示权重,默认 = -1
  • resetAdaGradIterationsint,在n次迭代之后重置AdaGrad历史梯度
    • 默认 = -1
  • rngRandom class,用一个随机种子来确保定型的初始权重保持一致
    • 默认 = new DefaultRandom()
    • 示例 = .rng(new DefaultRandom(3))
  • strideint[],降采样类层的大小
    • 默认 = {2,2}
  • sparsitydouble
    • 默认 = 0
  • stepFunctionStepFunction class,算法在学习过程中的权重调整幅度
    • 默认 = new GradientStepFunction()
  • useAdaGradboolean,在反向传播算法中采用AdaGrad学习速率适应
    • 默认 = true
  • useRegularizationboolean,采用正则化
    • 默认 = false
  • variablesList[String],梯度的键,确保能够有序地获取和设定梯度
    • 默认 = new ArrayList<>()
  • visibleUnitRBM.VisibleUnit,RBM可见单元/节点的类型,默认 = RBM.VisibleUnit.BINARY
  • weightInitWeightInit class,权重初始化方式
    • 默认 = WeightInit.VI
    • 选项:
      • WeightInit.DISTRIBUTION:用基于输入数据形状的分布来初始化权重
      • WeightInit.NORMALIZED:用正态分布来初始化权重
      • WeightInit.SIZE:用受限均匀分布来初始化权重,由数据形状决定最小值和最大值
      • WeightInit.UNIFORM:用受限均匀分布来初始化权重(指定最小值和最大值)
      • WeightInit.VI:用归一化方差来初始化权重(Glorot)
      • WeightInit.ZERO:初始权重设为零
  • weightShapeint[]

该类的更多详情参见JavaDoc

与我们在Gitter聊天