Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要一些关于深入学习4J单一RBM用法的帮助吗_Java_Deep Learning_Rbm_Deeplearning4j - Fatal编程技术网

Java 需要一些关于深入学习4J单一RBM用法的帮助吗

Java 需要一些关于深入学习4J单一RBM用法的帮助吗,java,deep-learning,rbm,deeplearning4j,Java,Deep Learning,Rbm,Deeplearning4j,我有一堆传感器,我真的只想重建输入 所以我想要的是: 训练完模型后,我将通过特征矩阵 得到重构后的特征矩阵 我想调查哪些传感器值与重建值完全不同 因此,我认为RBM将是正确的选择,因为我已经习惯了Java,所以我尝试使用deeplearning4j。但我很早就被卡住了。如果运行以下代码,我将面临两个问题 结果与正确的预测相差甚远,大多数预测结果都只是[1.00,1.00,1.00] 我希望返回4个值(这是预期重建的输入数) 那么我需要调整什么才能得到a)更好的结果和b)恢复重建的输入 publi

我有一堆传感器,我真的只想重建输入

所以我想要的是:

  • 训练完模型后,我将通过特征矩阵
  • 得到重构后的特征矩阵
  • 我想调查哪些传感器值与重建值完全不同
  • 因此,我认为RBM将是正确的选择,因为我已经习惯了Java,所以我尝试使用deeplearning4j。但我很早就被卡住了。如果运行以下代码,我将面临两个问题

  • 结果与正确的预测相差甚远,大多数预测结果都只是[1.00,1.00,1.00]

  • 我希望返回4个值(这是预期重建的输入数)

  • 那么我需要调整什么才能得到a)更好的结果和b)恢复重建的输入

    public static void main(String[] args) {
        // Customizing params
        Nd4j.MAX_SLICES_TO_PRINT = -1;
        Nd4j.MAX_ELEMENTS_PER_SLICE = -1;
        Nd4j.ENFORCE_NUMERICAL_STABILITY = true;
        final int numRows = 4;
        final int numColumns = 1;
        int outputNum = 3;
        int numSamples = 150;
        int batchSize = 150;
        int iterations = 100;
        int seed = 123;
        int listenerFreq = iterations/5;
    
        DataSetIterator iter = new IrisDataSetIterator(batchSize, numSamples);
    
        // Loads data into generator and format consumable for NN
        DataSet iris = iter.next();
        iris.normalize();
        //iris.scale();
        System.out.println(iris.getFeatureMatrix());
    
        NeuralNetConfiguration conf = new NeuralNetConfiguration.Builder()
                // Gaussian for visible; Rectified for hidden
                // Set contrastive divergence to 1
                .layer(new RBM.Builder()
                        .nIn(numRows * numColumns) // Input nodes
                        .nOut(outputNum) // Output nodes
                        .activation("tanh") // Activation function type
                        .weightInit(WeightInit.XAVIER) // Weight initialization
                        .lossFunction(LossFunctions.LossFunction.XENT)
                        .updater(Updater.NESTEROVS)
                        .build())
                .seed(seed) // Locks in weight initialization for tuning
                .iterations(iterations)
                .learningRate(1e-1f) // Backprop step size
                .momentum(0.5) // Speed of modifying learning rate
                .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) // ^^ Calculates gradients
                .build();
    
        Layer model = LayerFactories.getFactory(conf.getLayer()).create(conf);
        model.setListeners(Arrays.asList((IterationListener) new ScoreIterationListener(listenerFreq)));
    
        model.fit(iris.getFeatureMatrix());
        System.out.println(model.activate(iris.getFeatureMatrix(), false));
    }
    
    对于b),当调用activate()时,会得到一个“nlayers”数组列表。列表中的每个数组都是一个层的激活。数组本身由行组成:每个输入向量1行;每列包含该层中每个神经元的激活和该观察(输入)。 一旦所有层都被一些输入激活,就可以使用RBM.propDown()方法进行重建

    至于a),我担心正确地训练RBM是非常棘手的。 所以你真的想处理每个参数,更重要的是, 在培训期间监控各种指标,这些指标将为您提供有关培训是否正确的提示。就我个人而言,我喜欢策划:

    • 训练语料库上的分数(),即每次梯度更新后的重建误差;检查它是否减少
    • 另一个开发语料库上的分数():在出现过度拟合时警告有用
    • 参数向量的范数:它对分数有很大的影响
    • 两个激活图(=语料库上一层激活神经元的XY矩形图),仅在初始化之后和N步之后:这有助于检测不可靠的训练(例如:当全部为黑/白时,当大部分神经元从未激活时,等等)
      • 对于b),当您调用activate()时,您将得到一个“nlayer”数组列表。列表中的每个数组都是一个层的激活。数组本身由行组成:每个输入向量1行;每列包含该层中每个神经元的激活和该观察(输入)。 一旦所有层都被一些输入激活,就可以使用RBM.propDown()方法进行重建

        至于a),我担心正确地训练RBM是非常棘手的。 所以你真的想处理每个参数,更重要的是, 在培训期间监控各种指标,这些指标将为您提供有关培训是否正确的提示。就我个人而言,我喜欢策划:

        • 训练语料库上的分数(),即每次梯度更新后的重建误差;检查它是否减少
        • 另一个开发语料库上的分数():在出现过度拟合时警告有用
        • 参数向量的范数:它对分数有很大的影响
        • 两个激活图(=语料库上一层激活神经元的XY矩形图),仅在初始化之后和N步之后:这有助于检测不可靠的训练(例如:当全部为黑/白时,当大部分神经元从未激活时,等等)

        请加入我们在Gitter上的活动社区。我们可以帮助你:请加入我们在吉特的社区是活跃的。我们可以帮助您: