簡體   English   中英

DL4J預測格式

[英]DL4J Prediction Formatting

我對deeplearning4j有兩個相關的問題。

  1. 當我執行“ INDArray Forecast = model.output(features,false); ”以生成預測,我得到模型預測的標簽; 它是0或1。我試圖尋找一種具有概率(值介於0和1之間)而不是嚴格地為0或1的方法。當您需要為模型應考慮的閾值設置閾值時,這很有用。 0,應將其視為1。例如,對於任何高於或等於0.9的預測,您可能希望模型輸出“ 1”,否則輸出“ 0”。
  2. 我的第二個問題是,即使只有兩種可能,我也不確定為什么將輸出表示為二維數組(在下面的代碼后顯示),所以最好用一個值來表示它-特別是如果我們希望它作為一個概率值(問題1)。
    PS:如果與問題相關,則在架構中,使用“ .addColumnInteger ”定義輸出列。 以下是所用代碼的摘要。

部分代碼:

MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
            .seed(seed)
            .iterations(1)
            .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
            .learningRate(learningRate)
            .updater(org.deeplearning4j.nn.conf.Updater.NESTEROVS).momentum(0.9)
            .list()
            .layer(0, new DenseLayer.Builder()
                    .nIn(numInputs)
                    .nOut(numHiddenNodes)
                    .weightInit(WeightInit.XAVIER)
                    .activation("relu")
                    .build())
            .layer(1, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
                    .weightInit(WeightInit.XAVIER)
                    .activation("softmax")
                    .weightInit(WeightInit.XAVIER)
                    .nIn(numHiddenNodes)
                    .nOut(numOutputs)
                    .build()
            )
    .pretrain(false).backprop(true).build();

    MultiLayerNetwork model = new MultiLayerNetwork(conf);
    model.init();
    model.setListeners(new ScoreIterationListener(10));

    for (int n=0; n<nEpochs; n++) {
        model.fit(trainIter);
    }

    Evaluation eval = new Evaluation(numOutputs);
    while (testIter.hasNext()){
        DataSet t = testIter.next();
        INDArray features = t.getFeatureMatrix();
        System.out.println("Input features: " + features);
        INDArray labels = t.getLabels();
        INDArray predicted = model.output(features,false);
        System.out.println("Predicted output: "+ predicted);
        System.out.println("Desired output: "+ labels);
        eval.eval(labels, predicted);
        System.out.println();
    }
    System.out.println(eval.stats());

運行以上代碼的輸出:

輸入功能:[0.10、0.34、1.00、0.00、1.00]
預測的輸出: [1.00,0.00]
所需的輸出: [1.00,0.00]

*我希望輸出看起來像什么(即單值概率):**

輸入功能:[0.10、0.34、1.00、0.00、1.00]
預測的輸出: 0.14
期望的輸出: 0.0

我會在線回答您的問題,但我只想指出:我建議您看一下我們的文檔和示例: https : //github.com/deeplearning4j/dl4j-examples http://deeplearning4j.org/quickstart

  1. 100%0或1只是調整不良的神經網絡。 這根本不是事情的運作方式。 默認情況下,softmax返回概率。 您的神經網絡剛剛調好。 也查看更新dl4j。 我不確定您使用的是哪個版本,但是至少一年以上沒有在激活中使用字符串? 從我們開始,您似乎已經跳過了很多步驟。 我會再次重申,至少要在上面看看一個起點,而不要使用已有的代碼。

  2. 您所看到的只是標准的深度學習101。因此,我將為您提供的建議可以在Internet上找到,並且適用於任何深度學習軟件。 兩個標簽的softmax將每一行的總和為1。如果要1個標簽,請使用具有1個輸出和不同損失函數的S型信號。 我們使用softmax是因為它可以適用於任意數量的輸出,而您要做的就是更改輸出數量,而不必更改損耗函數激活函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM