我正在研究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。有声誉的人,请添加更多有用的标签
答案 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)
)。