【问题标题】:How can I train my deep learning network with multiple parameters?如何使用多个参数训练我的深度学习网络?
【发布时间】:2021-11-17 16:23:15
【问题描述】:

目前,我有 一个 数组用于我的深度学习网络:“光标到目标的距离”。看起来像这样:

数据:

//Array of last 20 hits that occurred....0.2254129882770741,0.16240028500697098,0.1375113264805262,0.35381412903306814,0.2397808577758728,0.29521410375781615,0.433078049523479,0.18128063688236676,0.28972880920545074,.......,0
     0.21006877393551196,0.1987825902438688,0.165062866168541,0.21124451464164626,0.29661243231132695,0.1999213305507936,0.21662535204339559,0.346436898477125,0.16091104172813975,......,0
 ... etc

然后我使用这个单一的数组来创建一个非常通用的模型:

//Note: VERY generic machine-learning code. Practically the iris example except modified for different values
RecordReader recordReader = new CSVRecordReader(numLinesToSkip, delimiter);
            recordReader.initialize(new FileSplit(new File("killauraData1.txt")));
            // objects, ready for use in neural network
            int labelIndex = 20; 
            int numClasses = 2; 
            int batchSize = 40;them into one
                                

            DataSetIterator iterator = new RecordReaderDataSetIterator(recordReader, batchSize, labelIndex, numClasses);
            DataSet allData = iterator.next();
            allData.shuffle();
            // int usePercentToTrain = 65;//Use this percent
            SplitTestAndTrain testAndTrain = allData.splitTestAndTrain(0.4);

            DataSet trainingData = testAndTrain.getTrain();
            DataSet testData = testAndTrain.getTest();

            // We need to normalize our data. We'll use NormalizeStandardize (which gives us
            // mean 0, unit variance):
            // DataNormalization normalizer = new NormalizerStandardize();
            // normalizer.fit(trainingData); //Collect the statistics (mean/stdev) from the
            // training data. This does not modify the input data
            // normalizer.transform(trainingData); //Apply normalization to the training
            // data
            // normalizer.transform(testData); //Apply normalization to the test data. This
            // is using statistics calculated from the *training* set

            final int numInputs = 20;
            int outputNum = 2;
            long seed = 6;

            log("Build model....");
            MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().seed(seed).activation(Activation.TANH)
                    .weightInit(WeightInit.XAVIER).updater(new Sgd(0.1)).l2(1e-4).list()
                    .layer(0, new DenseLayer.Builder().nIn(numInputs).nOut(outputNum).build())
                    .layer(1, new DenseLayer.Builder().nIn(2).nOut(2).build())
                    .layer(2,
                            new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
                                    .activation(Activation.SOFTMAX) // Override the global TANH activation with softmax for
                                                                    // this layer
                                    .nIn(2).nOut(outputNum).build())
                    .build();

            // run the model
            model = new MultiLayerNetwork(conf);
            model.init();
            // record score once every 100 iterations
            model.setListeners(new ScoreIterationListener(200));

            for (int i = 0; i < 5000; i++) {

                model.fit(trainingData);
            }

但我想使用多个参数。例如,“光标与目标的距离”、“玩家最近的速度”、“命中精度”等。所有这些都是double[],列出多达 20 种不同的命中准确率、光标距离等。

我将如何使用这些多个不同的数组而不是一个数组来训练我的模型?

【问题讨论】:

    标签: java machine-learning deeplearning4j


    【解决方案1】:

    通常这些只是特征向量中的每个特征。有多种方法可以为您的问题创建特征向量。其中包括:

    1. 原始浮点数据
    2. 类别转换为 0 和 1s

    如果您需要将多个输入映射到多个输出,那么您可以使用多输出回归。在这种情况下,您通常需要设置输入和标签并对其进行规范化。

    对它们进行归一化后,您还可以使用相同的归一化器并扩展神经网络的输出以匹配您期望的输出。

    Dl4j 在我们的规范器中内置了这两个功能。

    类似:

      NormalizerStandardize normalizer = new NormalizerStandardize();
            normalizer.fitLabel(true);
    
            // Now we create a random DataSet - normally you would have your real data
            DataSet data = new DataSet(Nd4j.rand(10, 3), Nd4j.rand(10, 1));
    
            // Fit the normalizer to the data - in this case it will calculate the means and standard deviations
            normalizer.fit(data);
           //pre process data in place
           normalizer.preProcess(data);
           //transform input data to normal
           normalizer.revertFeatures(data);
    
    

    【讨论】:

    • 我只寻找一个输出 - 标准化数据集的两个不同值如何允许将多个数组用于模型?也许我对 ML 太陌生,但我不完全理解你的答案,对不起!!
    • 在机器学习中,您将任意数量的输入变量映射到任意数量的输出变量。网络将尽最大努力使该功能适合您提供的任何数据。它是否准确在很大程度上取决于调整以及数据中是否存在相关性。为了使网络学习,您应该始终对输入和输出进行归一化(至少对于回归,分类是不同的),以便将问题限制在可学习的范围内。
    猜你喜欢
    • 2018-01-09
    • 2023-02-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 2014-06-03
    • 2019-11-30
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多