我在将"输入"数组传输到神经网络的学习中有错误。我需要教一个神经网络一个阵列,其中某些行中有不同数量的列。我将神经元的数量分配给数组行的最大值。我使用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个输入向量,并找到一种方法来近似有意义的缺失值。
简单地省略丢失值将是有问题的,因为如果您简单地删除缺失值并将所有内容移到左侧,则可能会有值进入错误的输入神经元。
如果阵列具有不同的长度,因为它们是序列长度不同的时间序列数据,则您要么需要使用不同类型的编码或时间序列类型模型(除了前馈神经网络除外(。