Я пытаюсь узнать о нейронных сетях, использующих C ++, и нашел учебник по распознаванию цифр, но когда я запускаю код, я получаю сообщение об ошибке «Ошибка отладки, векторный индекс выходит за пределы допустимого». Видимо проблема в loadTraining
функция, но не знаю, как изменить его, чтобы устранить ошибку.
void loadTraining(const char *filename, vector<vector<double>> &input, vector<vector<double>> &output)
{
int trainingSize = 946;
input.resize(trainingSize);
output.resize(trainingSize);
ifstream file(filename);
if(file)
{
string line;
int n;
for (int i=0 ; i<trainingSize ; i++) // load 946 examples
{
for (int h=0 ; h<32 ; h++) // 'images' are 32*32 pixels
{
getline(file, line);
for (int w=0 ; w<32 ; w++)
{
input[i].push_back(atoi(line.substr(w,1).c_str()));
}
}
getline(file, line);
output[i].resize(10); // output is a vector of size 10
n = atoi(line.substr(0,1).c_str());
output[i][n] = 1; // set index that represent the number to 1, other are automatically 0 because of the resize()
}
}
file.close();
}
Файл состоит из 32 * 32 массивов двоичных цифр.
Это один учебный пример.
Я пользуюсь visual studio 2013.
Рассмотреть возможность использования std::stoi
вместо atoi
, окружать std::stoi
в try
а также catch
блок для проверки конверсии. Также проверьте, если n >= 0 && n < 10
для устранения возможных ошибок индекса.
Других решений пока нет …