首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矩阵乘法的结果是'nan‘。

矩阵乘法的结果是'nan‘。
EN

Stack Overflow用户
提问于 2016-10-25 10:57:00
回答 1查看 857关注 0票数 1

在这里,我的代码中有两个矩阵乘法。第一个很好,但第二个给我‘南’输出。

西格莫德:

代码语言:javascript
复制
double sigmoide(double value) {
    return 1.0 / (1.0 + exp(-value));
}

初始化:

代码语言:javascript
复制
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之间的随机值:

代码语言:javascript
复制
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))); 
    }
}

矩阵-乘法:

代码语言:javascript
复制
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;
}

输出:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-25 11:00:00

你忘了初始化hiddenResultsoutputResults

做:

代码语言:javascript
复制
double hiddenResults[50][11] = {0};
double outputResults[50][1] = {0};

初始化其他变量时,您在它。

这是一个很好的习惯。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40238135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档