0
我有TrainingSets的向量(結構如下圖)稱爲數據OpenCV的填充數據與CvMat和驗證它
class TrainingSet
{
public:
int time;
float input[2];
float output[3*NUM_TRACKING_POINTS];
TrainingSet(int t, float in[2], float out[3*NUM_TRACKING_POINTS])
{
time = t;
for (int i = 0; i < 2; i++)
input[i] = in[i];
for (int i = 0; i < 3*NUM_TRACKING_POINTS; i++)
output[i] = out[i];
}
TrainingSet()
{
}
};
然後我嘗試採用這種矢量的內容,並把它們納入CvMats爲目的培訓一個神經網絡。
int datasize = data.size();
float** in = new float*[datasize];
float** out = new float*[datasize];
for (int i = 0; i < datasize; i++) {
in[i] = new float[2*TIME_STEPS];
out[i] = new float[3*NUM_TRACKING_POINTS];
}
for (int i = 0 ; i < datasize; i ++)
{
// get the first set in the sequence.
TrainingSet tset = data.front();
data.pop();
// get the inputs
in[i] = new float[2*TIME_STEPS];
in[i][0] = tset.input[0];
in[i][1] = tset.input[1];
// get the outputs
out[i] = new float[3*NUM_TRACKING_POINTS];
for (int j = 0; j < 3*NUM_TRACKING_POINTS; j++)
out[i][j] = tset.output[j];
for (int j = 2; j < 2*TIME_STEPS; j++)
{
if (i == 0)
in[i][j] = 0.0f;
else
in[i][j] = in[i - 1][j - 2];
}
}
// make matrices from data.
CvMat *trainInput = cvCreateMat(datasize, 2*TIME_STEPS, CV_32FC1);
cvInitMatHeader(trainInput, datasize, 2*TIME_STEPS, CV_32FC1, in);
CvMat *trainOutput = cvCreateMat(datasize, 3*NUM_TRACKING_POINTS, CV_32FC1);
cvInitMatHeader(trainOutput, datasize, 3*NUM_TRACKING_POINTS, CV_32FC1, out);
for (int x = 0; x < datasize; x++)
{
cout << "IN: ";
for (int y = 0; y < 2*TIME_STEPS; y++)
cout << cvmGet(trainInput, x, y) << " ";
cout << endl << "IN: ";
for (int y = 0; y < 2*TIME_STEPS; y++)
cout << in[x][y] << " ";
cout << endl << "OUT: ";
for (int y = 0; y < 3 * NUM_TRACKING_POINTS; y++)
cout << cvmGet(trainOutput, x, y) << " ";
cout << endl << "OUT: ";
for (int y = 0; y < 3 * NUM_TRACKING_POINTS; y++)
cout << out[x][y] << " ";
cout << endl << endl;
}
最後一個forloop是檢查矩陣內容是否是我剛剛提供的數據,但它們不匹配。矩陣似乎有完全不同的數據。
有什麼想法會出錯?
首先,我要聲明我不使用C++很多時候,我不是很好。也就是說,我不知道如何爲這個數據創建一個連續的數組。由於訓練集中數據文件的長度是可變的,訓練集中的數據也是可變的。此外,神經網絡的train()函數需要用於輸入和輸出集的矩陣訓練,您能給我一個使用CvSetData()來訓練神經網絡的例子嗎? – acp10bda 2011-04-10 18:28:03
我發現我可以實例化我的矩陣: \t CvMat trainInput = cvMat(datasize,2 * TIME_STEPS,CV_32S,in); \t CvMat trainOutput = cvMat(datasize,3 * NUM_TRACKING_POINTS,CV_32FC1,out); 但是這會導致一個奇怪的問題,它根本無法運行程序。它編譯,但是當我運行它時,它甚至在它到達我的程序之前,在內核中的某處發生異常。 – acp10bda 2011-04-12 11:19:36