gpt4 book ai didi

deeplearning4j - DL4J 预测格式化

转载 作者:行者123 更新时间:2023-12-02 04:31:55 24 4
gpt4 key购买 nike

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

  1. 当我执行“INDArray predicted = 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());

运行上述代码的输出:

Input features: [0.10, 0.34, 1.00, 0.00, 1.00]
Predicted output: [1.00, 0.00]
Desired output: [1.00, 0.00]

*我希望输出看起来像什么(即单值概率):**

Input features: [0.10, 0.34, 1.00, 0.00, 1.00]
Predicted output: 0.14
Desired output: 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 是因为它可以处理任意数量的输出,而您所要做的就是更改输出数量,而不必在此基础上更改损失函数激活函数。

关于deeplearning4j - DL4J 预测格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47991897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com