Java 如何在不调整神经元数量的情况下修复此点积方法?(爪哇)

Java 如何在不调整神经元数量的情况下修复此点积方法?(爪哇),java,multidimensional-array,neural-network,dot-product,Java,Multidimensional Array,Neural Network,Dot Product,我正在测试我的神经网络进行异或比较,我遇到了一个错误,我想在不改变第一个隐藏层中神经元数量的情况下修复它。导致错误的代码是: public double dotProduct(int[][] a, double[][] ds) { int i; double sum = 0; for(i = 0; i < a.length; i++) { int j; for(j = 0; j < a[i].length; j++)

我正在测试我的神经网络进行异或比较,我遇到了一个错误,我想在不改变第一个隐藏层中神经元数量的情况下修复它。导致错误的代码是:

public double dotProduct(int[][] a, double[][] ds) 
{
    int i;
    double sum = 0;
    for(i = 0; i < a.length; i++) 
    {
        int j;
        for(j = 0; j < a[i].length; j++) 
        {
            sum += a[i][j] * ds[i][j];
        }
    }
    return sum;
}
它是一个多维数组,包含7个数组。然后将其用于:

public double think(int[][] input) 
{
    output_from_layer1 = sigmoid(dotProd.dotProduct(input, layer1.getWeights()));

    return output_from_layer1;
}
函数的sigmoid部分不是一个问题,因为它需要一个双精度和 dotProduct应该输出一个double。据我所知,问题是dotProduct函数正在获取一个较大的多维数组,然后尝试将其与较小的多维数组(调用该层的权重数组的layer1.getWeights getter)交叉

层的权重定义如下:

layerWeights = new double[numNeurons][inpNum];
dot产品中使用的图层是:

XORlayer layer1 = new XORlayer(4, 3);
4个神经元,每个神经元有3个输入。这个问题源于这样一个事实:据我所知,这一层中没有足够的神经元来容纳输入量,当没有任何东西可以进一步与输入值相乘时,就会生成空指针异常

我们在神经元中有12个输入,21个输入值

我的主要问题是,有没有办法解决这个问题,使点积运算成功完成,而不必简单地将层包含的神经元数量扩大到7个?

可能会有所帮助。正如这里所建议的,因为您使用的是2D数组,所以矩阵乘法(而不是点积)可能更合适

当然,与点积类似,矩阵乘法的

inputSets
是一个7x3矩阵,
layerWeights
是一个4x3矩阵。
layerWeights
的矩阵为3x4矩阵。现在维度对齐,矩阵乘法得到7x4矩阵

根据公布的代码,我建议如下:

output_from_layer1 = sigmoid(matrixMult.multiply(input, transpose(layer1.getWeights())));
output_from_layer1 = sigmoid(matrixMult.multiply(input, transpose(layer1.getWeights())));