DL4J预测格式

我有两个关于deeplearning4j的问题,它们有些相关。DL4J预测格式

  1. 当我执行“INDArray预测= model.output(features,false);“来产生预测,我得到由模型预测的标签;它是0或1.我试图寻找一种方法来获得概率(值介于0和1之间),而不是严格的0或1.当您需要为模型应该考虑的阈值设置阈值时,这非常有用0以及它应该考虑为1.例如,您可能希望您的模型为任何高于或等于0.9的预测输出“1”,否则输出“0”。
  2. 我的第二个问题是,我不知道为什么输出被表示为一个二维数组(即在下面的代码后显示),即使只有两种可能性,所以最好用一个值来表示它 - 特别是如果我们希望它作为一个值的概率(问题#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

  1. 100%0或1只是一个严重调整的神经网络。这根本不是事情的方式。 softmax默认返回概率。你的神经网络被严重调整。看看更新dl4j了。我不确定你在使用什么版本,但是现在我们还没有在激活中使用字符串至少一年?当我们开始时,你似乎跳过了很多步骤。我会再次重申,至少看看上面的起点,而不是使用一年前的代码。

  2. 你所看到的只是标准的深度学习101.所以我要给你的建议可以在互联网上找到,适用于任何深度学习软件。两个标签softmax将每行加1。如果您想要1个标签,请使用带有1个输出和不同损失函数的sigmoid。我们使用softmax是因为它可以用于任意数量的输出,您所要做的就是更改输出的数量,而不是必须在其上更改损失函数激活函数。

以上是 DL4J预测格式 的全部内容, 来源链接: utcz.com/qa/264932.html

回到顶部