通过神经网络的不同宽度阵列的错误处理数据



我在将"输入"数组传输到神经网络的学习中有错误。我需要教一个神经网络一个阵列,其中某些行中有不同数量的列。我将神经元的数量分配给数组行的最大值。我使用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();

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

很难在不知道数据代表的情况下回答。这些列代表什么?为什么有时有不同的数量?他们缺少价值吗?如果它们缺少值,那么您应该始终拥有13个输入向量,并找到一种方法来近似有意义的缺失值。

简单地省略丢失值将是有问题的,因为如果您简单地删除缺失值并将所有内容移到左侧,则可能会有值进入错误的输入神经元。

如果阵列具有不同的长度,因为它们是序列长度不同的时间序列数据,则您要么需要使用不同类型的编码或时间序列类型模型(除了前馈神经网络除外(。

最新更新