当前位置: 首页 > 知识库问答 >
问题:

代码为我提供了使用Neuroph的VectorSizeMismatchException

隆谦
2023-03-14

我知道如何使用Java编码,但我是Neuroph的新手,我用这些代码得到了一个VectorSizemismatchException

Main:https://pastebin.com/dntwrmzn

public static void main(String[] args) {
    AiManager.trainNeuralNetwork(AiManager.initilizeNetwork());
}

经理:https://pastebin.com/cswsivvt

import org.neuroph.core.Layer;
import org.neuroph.core.NeuralNetwork;
import org.neuroph.core.Neuron;
import org.neuroph.core.data.DataSet;
import org.neuroph.core.data.DataSetRow;
import org.neuroph.nnet.Perceptron;
import org.neuroph.util.ConnectionFactory;
import org.neuroph.util.NeuralNetworkType;

public class AiManager {

  public static NeuralNetwork<?> initilizeNetwork() {
    Layer inputLayer = new Layer();
    inputLayer.addNeuron(new Neuron());
    inputLayer.addNeuron(new Neuron());

    Layer hiddenLayerOne = new Layer();
    hiddenLayerOne.addNeuron(new Neuron());
    hiddenLayerOne.addNeuron(new Neuron());
    hiddenLayerOne.addNeuron(new Neuron());
    hiddenLayerOne.addNeuron(new Neuron());

    Layer hiddenLayerTwo = new Layer();
    hiddenLayerTwo.addNeuron(new Neuron());
    hiddenLayerTwo.addNeuron(new Neuron());
    hiddenLayerTwo.addNeuron(new Neuron());
    hiddenLayerTwo.addNeuron(new Neuron());

    Layer outputLayer = new Layer();
    outputLayer.addNeuron(new Neuron());

    NeuralNetwork<?> ann = new Perceptron(2, 1);

    ann.setInputNeurons(inputLayer.getNeurons());
    ann.setOutputNeurons(outputLayer.getNeurons());

    ann.addLayer(0, inputLayer);
    ann.addLayer(1, hiddenLayerOne);

    ConnectionFactory.fullConnect(ann.getLayerAt(0), ann.getLayerAt(1));

    ann.addLayer(2, hiddenLayerTwo);

    ConnectionFactory.fullConnect(ann.getLayerAt(1), ann.getLayerAt(2));

    ann.addLayer(3, outputLayer);

    ConnectionFactory.fullConnect(ann.getLayerAt(2), ann.getLayerAt(3));

    ConnectionFactory.fullConnect(ann.getLayerAt(0), ann.getLayerAt(ann.getLayersCount()-1), false);

    ann.setNetworkType(NeuralNetworkType.MULTI_LAYER_PERCEPTRON);

    ann.setInputNeurons(inputLayer.getNeurons());
    ann.setOutputNeurons(outputLayer.getNeurons());

    return ann;
  }

  public static NeuralNetwork<?> trainNeuralNetwork(NeuralNetwork<?> ann) {
    int inputSize = 2;
    int outputSize = 1;
    DataSet ds = new DataSet(inputSize, outputSize);

    DataSetRow rOne = new DataSetRow(new double[] { 0, 1 }, new double[] { 1 });

    ds.addRow(rOne);

    DataSetRow rTwo = new DataSetRow(new double[] { 1, 1 }, new double[] { 0 });

    ds.addRow(rTwo);

    DataSetRow rThree = new DataSetRow(new double[] { 0, 0 }, new double[] { 0 });

    ds.addRow(rThree);

    DataSetRow rFour = new DataSetRow(new double[] { 1, 0 }, new double[] { 1 });

    ds.addRow(rFour);

    ann.learn(ds);

    return ann;
  }
}

共有1个答案

冯枫涟
2023-03-14

这个错误是由于Neuroph API的编码方式造成的,您可以看到您添加了两次表达式Ann.SetInputNeurons(InputLayer.GetNeurons());Ann.SetOutputNeurons(OutputLayer.GetNeurons());,但是如果您在调用这些表达式之前和之后打印表达式Ann.GetInputNeurons().Size(),您将看到每次“设置”输入神经元时,都添加了新的神经元。

请参阅NeuralNetwork类的来源:

/**
 * Sets input neurons
 *
 * @param inputNeurons array of input neurons
 */
public void setInputNeurons(List<Neuron> inputNeurons) {
    for (Neuron neuron : inputNeurons) {
        this.inputNeurons.add(neuron);
    }
}

理论上,去掉这4行应该可以消除误差。

 类似资料:
  • 我已经开始学习,我尝试将它与代码一起使用,但是

  • 我曾经遇到过一个关于颤振的问题,我不得不下载jdk。我给了它一个路径D:/jdk,但随后我创建了一个新分区,并在C:\Program Files\Java\jdk-16.0.1上再次下载了它。现在,当我在Visual Studio代码中运行应用程序时,出现一个错误: 失败:构建失败,有一个异常。 > 错误:提供的javaHome必须是有效的目录。您提供了:D:\jdk 尝试:使用--stacktr

  • 我是Java和Vert.x的新手 我收到一个编译器错误。对于类型HttpRequest我做错了什么,方法basicAuthentication(String,String)未定义。

  • 我试图解决Dijkstra算法上的一个hackerrank问题--https://www.hackerrank.com/challenges/dijkstrashortreach。我在使用我自己的Dijkstra代码逻辑。虽然我的代码解决了更容易的测试用例,但它在更高的测试用例上失败了。我猜我的代码在某个地方缺少了一些传递性,并且我得到的某个节点的值高于预期。你能帮我找出我的错误吗?问题:输入格式

  • 我们有一个适用于Android的单一代码库 截至目前,Flutter SDK不支持某些库/插件。 为了缓解这些问题,我们维护了两个单独的存储库,一个用于 Android-iOS,另一个用于 Web。 另外,在这里加起来,对于单独的存储库,因为每个Flutter产品都有一个唯一文件。现在有一些插件目前在App中受支持,但在Flutter Web上尚未支持,即Awesome Notifications