我有一个非常有趣的问题,但我解决了 3 个小时,但我无法弄清楚发生了什么以及为什么它不起作用。我试过谷歌它,但没有结果。
我在 CUDA 上编写程序。我有这段非常简单的代码:
__global__ void calcErrorOutputLayer_kernel(*arguments...*)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
float gradient;
float derivation;
derivation = pow((2/(pow(euler, neuron_device[startIndex + idx].outputValue) +
pow(euler, -neuron_device[startIndex + idx].outputValue))), 2);
gradient = (backVector_device[idx] - neuron_device[startIndex + idx].outputValue);
gradient = gradient * derivation; //this line doesn't work
gradient = gradient * 2.0; //this line works
好的,所以梯度计算正确并且推导也正确。但是当上线时,这两个变量应该在哪里相乘什么都没有发生(梯度的值没有改变)并且在下一行 CUDA 调试器告诉我:“'派生'在目标位置没有价值”
gradient * 2.0 正常工作,它改变了梯度值 2 次。
任何人都可以帮助我吗?