C 特征会引发错误,但完成计算
C++ Eigen throws error but finishes calculation
我使用eigen有一个以下代码,但是执行时具有某些Wierd行为
#include <stdio.h>
#include <iostream>
#include <time.h>
#include <math.h>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
MatrixXd sigmoid(MatrixXd);
MatrixXd sigmoid_d(MatrixXd);
class Layer{
public:
MatrixXd layerweights;
Layer(int x,int y){
layerweights.resize(x,y);
for(int i=0;i<layerweights.rows();i++){
for(int j=0;j<layerweights.cols();j++){
double r =(rand()/(double)(RAND_MAX)) * 2 - 1;
layerweights(i,j) = r;
}
}
}
Layer(){
this->layerweights.setZero();
}
};
class Network{
public:
Layer l1;
Layer l2;
MatrixXd inp;
MatrixXd outp;
int id;
Network(){
id = 0;
inp.resize(1,5);
inp << 0,1,2,3,4;
outp.resize(1,5);
outp << 0,1,4,9,16;
}
MatrixXd think(){
MatrixXd ol1 = sigmoid(inp * l1.layerweights);//1x5*5x5 1x5
MatrixXd ol2 = sigmoid(ol1 * l2.layerweights); //1x5*5x5 1x5
return ol2;
}
int main() {
Network generation [10];
srand(time(NULL));
for(int i=0;i<6;i++){ //initialize 1st generation
generation[i].l1 = Layer(5,5);
generation[i].l2 = Layer(5,5);
generation[i].id = i;
}
for(int i=0;i<=6;i++){
cout<<generation[i].think()<<'n';
}
return 0;
}
MatrixXd sigmoid(MatrixXd x){
return 1./(1+(x.array() * -1).exp());
}
控制台中的输出为:
断言失败:lhs.cols()== rhs.rows()&amp;&amp;"无效矩阵产品"&amp; amp;"如果您想要系数或点产品使用相应的显式功能",则文件C: mingw include eigen eigen src/core/product.h,第97行
此应用程序已要求以不寻常的方式终止运行时。请联系应用程序的支持团队以获取更多信息。
15.7222 7.48441 15.4497 8.88806 15.29648.90715 7.4913 4.46665 11.0792 9.322624.38281 5.5597 6.06866 7.33861 3.59835.69089 2.82105 8.79453 2.2928 7.468314.2536 5.6492 11.3739 11.9831 5.049559.85721 16.4741 4.57733 3.87002 2.37858
此外,它还打开gena_exe无法正常工作的窗口(我在Windows笔记本电脑上工作)。
这很奇怪的是,Prūogram被拒绝到结束而不会停止也许只是因为我的代码比错误处理更快发生错误时
请帮助 - 谢谢
好吧,这花了我一秒钟,但是我发现了发生了什么:您在第一个循环for (int i = 0; i<6; i++)
中创建了6代,但在下一个for(int i=0;i<=6;i++)
中以超过7次迭代,所以最后一个呼叫在MatrixXd ol1 = sigmoid(inp * l1.layerweights)
将i<=6
更改为i<6
,不会发生崩溃。
但是,事情是,您可以在调试器的帮助下很简单地发现它。它确实是有帮助的工具,并且Windows上的大部分IDE都有一个。我鼓励您开始使用它。
另外,只要您的程序是单线程,就不会有机会"在发生错误时更快地处理错误处理"。一旦您尝试做无效的数学表达表达,eigen断言并关闭了您的程序,但是,无论已持续到控制台上的任何东西。
- 我的字符计数代码计算错误.为什么
- 为什么 2 个双精度值之间的差值计算错误?
- C++ openmp 并行计算计算错误的结果
- Qt qreal计算错误
- C 并行矩阵乘法,计算错误
- Arduino计算错误 - 不应该时给出负值
- 当尺寸变大时,会出现矩阵计算错误
- C++ if 语句数学计算错误
- 浮点数的不准确导致计算错误
- 优化标志会导致计算错误
- Kahan求和算法在GCC编译时存在较大的计算错误
- 为什么在函数中传递参数时会出现算术计算错误
- 增加数组大小时 CUDA 主体磁贴计算错误代码 77
- OpenGL漫射照明计算错误
- 具有参数计算错误的重载函数
- 我的程序中有计算错误吗
- 在C++中使用ceil函数时出现计算错误
- 模拟读数计算错误
- struct和time_t的计算错误
- Pow()计算错误