传递Double Vector或Array作为neuroph.setInput()参数

时间:2015-10-31 16:40:22

标签: java vector parameter-passing neural-network overloading

我正在研究Neuroph ANN框架。有一点,在训练神经网络后,使用以下方法测试新输入(该库是开源的,所以我能够引用我导入的库1内的实际实现) :

/**
 * Sets network input. Input is an array of double values.
 *
 * @param inputVector network input as double array
 */
public void setInput(double... inputVector) throws VectorSizeMismatchException {
    if (inputVector.length != inputNeurons.size()) {
        throw new VectorSizeMismatchException("Input vector size does not match network input dimension!");
    }

    int i = 0;
    for (Neuron neuron : this.inputNeurons) {
        neuron.setInput(inputVector[i]); // set input to the coresponding neuron
        i++;
    }

}
可悲的是,我在通过参数测试时遇到了很多困难。首先,我将成功传递由逗号分隔的每个Double值。但后来我的输入大小增加到400.我试图将输入传递为Double Vector以及Double Array(盲目镜头),但我收到的错误是该方法无法用这样的参数解决。

以下是我正在执行此操作的代码段:

public String predict(String features)
{
    // load the saved network
    NeuralNetwork neuralNetwork = NeuralNetwork.createFromFile(nnet_path);
    // set network input

    String[] feature_pieces = features.split(" ");

    System.out.println("\nINPUT FEATURES: " + Arrays.toString(feature_pieces));

    Double[] feature_pieces_double = new Double[feature_pieces.length];

    for (int i = 0; i < feature_pieces.length; i++) {
        feature_pieces_double[i] = Double.parseDouble(feature_pieces[i]);

    }

    Vector<Double> features_vector = new Vector<>(Arrays.asList(feature_pieces_double));

    //neuralNetwork.setInput(feature_pieces_double); //TODO

    neuralNetwork.setInput(features_vector); //TODO
.
.
.

请帮助我,我做错了什么。

供参考,here is the javadoc部分提及此方法。 (javadoc奇怪地没有说过将Array作为输入的重载方法)

P.S。有声誉的人,请添加更多有用的标签

1 个答案:

答案 0 :(得分:1)

你不需要Vector:

double[] feature_pieces_double = new double[feature_pieces.length];

for (int i = 0; i < feature_pieces.length; i++) {
    feature_pieces_double[i] = Double.parseDouble(feature_pieces[i]);
}

neuralNetwork.setInput(feature_pieces_double);

但请务必使用double而不是Double

以下方法中的args是一个数组:

public void method(double... args)

所以这相当于

public void method(double[] args)

(除了使用...之外,您还可以直接指定以逗号分隔的方法调用中的参数:method(1.0, 2.0))。