DL4J预测格式
我有两个关于deeplearning4j的问题,它们有些相关。DL4J预测格式
- 当我执行“INDArray预测= model.output(features,false);“来产生预测,我得到由模型预测的标签;它是0或1.我试图寻找一种方法来获得概率(值介于0和1之间),而不是严格的0或1.当您需要为模型应该考虑的阈值设置阈值时,这非常有用0以及它应该考虑为1.例如,您可能希望您的模型为任何高于或等于0.9的预测输出“1”,否则输出“0”。
- 我的第二个问题是,我不知道为什么输出被表示为一个二维数组(即在下面的代码后显示),即使只有两种可能性,所以最好用一个值来表示它 - 特别是如果我们希望它作为一个值的概率(问题#1)。
PS:在与问题相关的情况下,在Schema中,输出列使用“.addColumnInteger”来定义。以下是所用代码的片段。代码的
部分:
输入特征:[0.10,0.34,1.00,0.00,1.00]
从运行上述代码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());
输出 预测输出:[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
100%0或1只是一个严重调整的神经网络。这根本不是事情的方式。 softmax默认返回概率。你的神经网络被严重调整。看看更新dl4j了。我不确定你在使用什么版本,但是现在我们还没有在激活中使用字符串至少一年?当我们开始时,你似乎跳过了很多步骤。我会再次重申,至少看看上面的起点,而不是使用一年前的代码。
你所看到的只是标准的深度学习101.所以我要给你的建议可以在互联网上找到,适用于任何深度学习软件。两个标签softmax将每行加1。如果您想要1个标签,请使用带有1个输出和不同损失函数的sigmoid。我们使用softmax是因为它可以用于任意数量的输出,您所要做的就是更改输出的数量,而不是必须在其上更改损失函数和激活函数。
以上是 DL4J预测格式 的全部内容, 来源链接: utcz.com/qa/264932.html