矩阵乘法的结果是'nan'
Result of matrix-multiplication is 'nan'
这里我的代码中有两个矩阵乘法。第一个工作正常,但第二个给我'nan'输出。
Sigmoide:
double sigmoide(double value) {
return 1.0 / (1.0 + exp(-value));
}
初始化:
double LO = -0.5;
double HI = 0.5;
double input[50][2];
double hiddenWeights[2][10];
double outputWeights[11][1];
double hiddenResults[50][11];
double outputResults[50][1];
for (int i = 0; i < 50; i++) {
input[i][0] = 1.0f; /// Bias
input[i][1] = (7.0f/50.0f) * (double)i; /// Samples
}
for (int i = 0; i < 50; i++) {
outputSetpoint[i][0] = sin((7.0f/50.0f) * (double)i);
}
-0.5到0.5之间的随机值:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 10; j++) {
hiddenWeights[i][j] = LO + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(HI-LO)));
}
}
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 1; j++) {
outputWeights[i][j] = LO + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(HI-LO)));
}
}
矩阵乘法:
for (int s = 0; s < 50; s++) {
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 2; i++) {
// First matrix-multiplication
hiddenResults[s][j] += nexttowardf(input[s][i] * hiddenWeights[i][j], 0.0f);
}
hiddenResults[s][10] = 1.0f;
hiddenResults[s][j] = sigmoide(hiddenResults[s][j]);
}
for (int j = 0; j < 1; j++) {
for (int i = 0; i < 11; i++) {
// Second matrix-multiplication
outputResults[s][j] += hiddenResults[s][i] * outputWeights[i][j];
}
outputResults[s][j] = sigmoide(outputResults[s][j]);
error = outputSetpoint[s][j] - outputResults[s][j];
}
std::cout << outputResults[s][0] << std::endl;
}
输出:nan
1
0.287491
0.432262
0.293168
0.336324
0.283587
0.282668
1
0.333261
nan
0.279217
nan
0.239026
0
0.338551
0.274522
0.209411
0.24247
0.273364
0.179109
0.199499
0.271506
1
nan
nan
nan
nan
您忘记初始化hiddenResults
和outputResults
:
double hiddenResults[50][11] = {0};
double outputResults[50][1] = {0};
初始化其他变量。
相关文章:
- 为什么这个程序的结果是3 "born"?和 4 死
- 分配给浮点数的积分文字除法 - 为什么结果是错误的?
- C++初始化的结果是什么?
- 我的输出结果是 0 英寸C++.可能是什么问题
- 为什么需要 FPU 重置以防止 NaN 结果传播到下一个计算结果?
- 在C++中使用 fread() 来解释这个结果是什么?
- 为什么双算的结果是错误的?
- 为什么一个简单的C++程序会有错误的结果?是 #define 引起的吗?
- 在运行libtorch的模型时获得的结果是不正确的,该模型经过训练并从Pytorch出口
- 是迭代器增量结果是新的迭代器
- 结果是不同的;C++ 中的 recv(sock,buf,sizeof(buf),0) 和 strlen(buf)
- 非常量表达式的左值到右值转换的结果是常数吗?
- 将Execl命令的结果(是目录列表)输送到父进程
- 如果我将未签名的int添加到负int且算术结果是正面的,会发生什么
- decltype( (A{}.int_member) 的正确结果是什么)
- 当我们在int上进行操作时,结果是暂时存储在int中的结果
- 双倍和NaN比较的结果是什么
- 着色器中实现双精度cos()的结果是NaN,但在CPU上运行良好.出了什么问题
- 矩阵乘法的结果是'nan'
- 将数字与NaN进行比较的结果是什么