首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DL4J预测格式

DL4J预测格式
EN

Stack Overflow用户
提问于 2017-12-27 12:05:13
回答 1查看 2.4K关注 0票数 3

关于deeplearning4j,我有两个相关的问题。

  1. 当我执行“INDArray predicted =model.output(特性,false)”生成预测时,我得到了模型预测的标签;它要么是0,要么是1。我试图寻找一种方法来获得一个概率(值介于0到1之间),而不是严格意义上的0或1。当您需要为您的模型应该考虑的值设置为0以及它应该考虑的值为1时,这是很有用的。例如,您可能希望您的模型输出'1‘,对于任何高于或等于0.9或等于0.9的预测,否则输出'0’。
  2. 我的第二个问题是,我不知道为什么输出被表示为二维数组(如下面的代码所示),尽管只有两种可能性,所以最好用一个值来表示它--特别是如果我们希望它是一个概率(问题1),也就是一个值。 PS:在与问题相关的情况下,模式中的输出列使用".addColumnInteger“定义。下面是使用的代码片段。

代码的一部分:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2017-12-27 13:31:11

我会用内联的方式回答你的问题,但我只想指出:我建议看看我们的文档和例子:https://github.com/deeplearning4j/dl4j-examples http://deeplearning4j.org/quickstart

  1. 100% 0或1只是一个严重调整的神经网络。事情根本不是这样的。默认情况下,softmax返回概率。你的神经网络调得很差。还可以看看更新dl4j。我不知道你用的是什么版本,但我们已经至少一年没有使用字符串了?从我们开始的时候你好像跳了很多步。我将再次重申,至少在上面查看一下起点,而不是使用已有多年的代码。
  2. 你看到的只是标准的深度学习101。因此,我将要给你的建议可以在互联网上找到,并且适用于任何深度学习软件。如果你想要一个标签,使用乙状结肠有一个输出和一个不同的损失函数。我们使用softmax,因为它可以用于任意数量的输出,而您所要做的就是改变输出的数量,而不是在此基础上更改丢失函数和激活函数。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47991897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档