gpt4 book ai didi

java - 如何在不调整神经元数量的情况下修复这种点积方法? ( java )

转载 作者:行者123 更新时间:2023-12-02 11:45:49 25 4
gpt4 key购买 nike

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

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;
}

给了我一个空指针异常。点积计算本身用于从我的神经网络提供的输入集生成点积。

输入集是这样的:

int inputSets[][] = 
{
{0, 0, 1},
{0, 1, 1},
{1, 0, 1},
{0, 1, 0},
{1, 0, 0},
{1, 1, 1},
{0, 0, 0}
};

这是一个包含 7 个数组的多维数组。然后将其用于此:

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

return output_from_layer1;
}

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

层的权重定义如下:

layerWeights = new double[numNeurons][inpNum];

点积中使用的图层是:

XORlayer layer1 = new XORlayer(4, 3);

所以 4 个神经元,每个神经元有 3 个输入。问题源于这样一个事实:据我所知,该层中没有足够的神经元来容纳输入量,当没有任何内容可以与输入值相乘时,这会生成空指针异常.

神经元中有 12 个输入和 21 个输入值。

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

最佳答案

This discussion可能有帮助。正如那里所建议的,由于您使用的是二维数组,因此矩阵乘法(而不是点积)可能更合适。

当然,与点积类似,dimensions must be aligned用于矩阵乘法。

inputSets 是一个 7x3 矩阵,layerWeights 是一个 4x3 矩阵。 transpose layerWeights 是一个 3x4 矩阵。现在维度已对齐,矩阵乘法生成 7x4 矩阵。

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

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

关于java - 如何在不调整神经元数量的情况下修复这种点积方法? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48208348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com