通过神经网络对不同宽度的数组数据进行错误处理

时间:2019-05-10 19:28:18

标签: java neural-network encog

在将“输入”数组传输到神经网络进行学习时出现错误。我需要教一个神经网络一个数组,其中某些行中的列数不同。我将神经元的数量分配给数组行的最大值。我使用encog库。是否有可能做到这一点?请帮忙,因为我是初学者。

我试图减少神经网络中神经元的数量,但未使用数组中的某些数据。我试图找到一些有关此的信息,但没有成功。

//array with data for training
public static double[][] INPUT = {
{1.0, 8.0, 13.0, 0,0, 12.0, 6.0, 17.0, 24.0, 440.0, 6.0, 0.0, 19.0,96.0}, 
{1.0, 0,0, 0.0, 4.0, 52.0, 6.0, 0.0, 5.0, 6.0, 7.0, 150.0, 5.0, 1.0},
{0.0, 0.0, 0.0, 0.0, 0.0, 413.0, 0.0, 117.0, 0.0, 0.0, 0.0}, 
{1.0, 1.0, 1.0, 7.0, 0.0, 3.0, 7.0, 167.0, 1.0, 7.0, 0.0, 1.0, 44.0}, 
{0.0, 1.0, 5.0, 5.0, 5.0, 6.0, 0.0, 4.0, 186.0, 13.0, 0.0, 1.0}
};

//ideal data for neural network
public static double[][] IDEAL = {{0.9, 0.1}, {0.3, 0.7}, {0.2, 0.8}, 
{1.0, 0.0}, {0.4, 0.6}};

这里的神经网络结构

BasicNetwork network = new BasicNetwork();
network.addLayer(new BasicLayer(null, true, 13));
network.addLayer(new BasicLayer(new ActivationSigmoid(), true, 9));
network.addLayer(new BasicLayer(new ActivationSigmoid(), true, 2));
network.getStructure().finalizeStructure();
network.reset();

MLDataSet trainSet = new BasicMLDataSet(INPUT, IDEAL);
MLTrain train = new ResilientPropagation(network, trainSet);

    int epoch = 1;

    do {
        train.iteration();
        System.out.println("Epoch #" + epoch + " Error:" + 
train.getError());
        epoch++;
    } while (train.getError() > 0.01);
    train.finishTraining();

1 个答案:

答案 0 :(得分:0)

上面,您将输入神经元计数设置为13,因此Encog将要求您始终提交13个输入。

不知道数据代表什么就很难回答。这些列代表什么?为什么有时您会有不同的金额?他们是否缺少价值观?如果它们是缺失值,那么您应该始终将输入向量设置为13,并找到一种方法来近似有意义的缺失值。

仅忽略缺失值将是一个问题,因为如果您只是删除缺失值并将所有内容移至左侧,则可能会将值输入到错误的输入神经元。

如果由于数组是某种具有不同序列长度的时间序列数据而长度不同,则您需要使用其他类型的编码或时间序列类型模型(前馈神经网络除外)。