将双向量或数组作为 neuroph.setInput() 参数传递
passing Double Vector or Array as neuroph.setInput() paramater
我正在研究 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。我尝试将输入作为双向量和双数组(盲拍)传递,但我收到错误消息,无法使用此类参数解析该方法。
这是我这样做的代码片段:
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。有足够信誉的人,请添加更多有用的标签
您不需要矢量:
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)
)。
我正在研究 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。我尝试将输入作为双向量和双数组(盲拍)传递,但我收到错误消息,无法使用此类参数解析该方法。
这是我这样做的代码片段:
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。有足够信誉的人,请添加更多有用的标签
您不需要矢量:
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)
)。