Я пытаюсь реализовать нейронную сеть с помощью библиотеки OpenCV ANN. У меня было рабочее решение, но после обновления до OpenCV 3.1 оно перестало работать. Поэтому я создал упрощенный код для тестирования, но проблема все еще остается. ИНС успешно обучена, но когда я пытаюсь вызвать предсказание со строкой из trainData, оно возвращает Mat значений nan. Код
cv::Ptr< cv::ml::ANN_MLP > nn = cv::ml::ANN_MLP::create();
nn->setActivationFunction(cv::ml::ANN_MLP::SIGMOID_SYM);
nn->setTrainMethod(cv::ml::ANN_MLP::BACKPROP);
nn->setBackpropMomentumScale(0.1);
nn->setBackpropWeightScale(0.1);
nn->setTermCriteria(cv::TermCriteria(cv::TermCriteria::MAX_ITER, (int)100000, 1e-6));
cv::Mat trainData(15, 4, CV_32FC1);
trainData.at(0, 0) = 5.5f; trainData.at(0, 1) = 3.5f; trainData.at(0, 2) = 1.3f; trainData.at(0, 3) = 0.2f;
trainData.at(1, 0) = 6.5f; trainData.at(1, 1) = 2.8f; trainData.at(1, 2) = 4.5999999f; trainData.at(1, 3) = 1.5f;
trainData.at(2, 0) = 6.3000002f; trainData.at(2, 1) = 2.3f; trainData.at(2, 2) = 4.4000001f; trainData.at(2, 3) = 1.3f;
trainData.at(3, 0) = 6.0f; trainData.at(3, 1) = 2.2f; trainData.at(3, 2) = 4.0f; trainData.at(3, 3) = 1.0f;
trainData.at(4, 0) = 4.5999999f; trainData.at(4, 1) = 3.0999999f; trainData.at(4, 2) = 1.5f; trainData.at(4, 3) = 0.2f;
trainData.at(5, 0) = 5.0f; trainData.at(5, 1) = 3.2f; trainData.at(5, 2) = 1.2f; trainData.at(5, 3) = 0.2f;
trainData.at(6, 0) = 7.4000001f; trainData.at(6, 1) = 2.8f; trainData.at(6, 2) = 6.0999999f; trainData.at(6, 3) = 1.9f;
trainData.at(7, 0) = 6.0f; trainData.at(7, 1) = 2.9000001f; trainData.at(7, 2) = 4.5f; trainData.at(7, 3) = 1.5f;
trainData.at(8, 0) = 5.0f; trainData.at(8, 1) = 3.4000001f; trainData.at(8, 2) = 1.5f; trainData.at(8, 3) = 0.2f;
trainData.at(9, 0) = 6.4000001f; trainData.at(9, 1) = 2.9000001f; trainData.at(9, 2) = 4.3000002f; trainData.at(9, 3) = 1.3f;
trainData.at(10, 0) = 7.1999998f; trainData.at(10, 1) = 3.5999999f; trainData.at(10, 2) = 6.0999999f; trainData.at(10, 3) = 2.5f;
trainData.at(11, 0) = 5.0999999f; trainData.at(11, 1) = 3.3f; trainData.at(11, 2) = 1.7f; trainData.at(11, 3) = 0.5f;
trainData.at(12, 0) = 7.1999998f; trainData.at(12, 1) = 3.0f; trainData.at(12, 2) = 5.8000002f; trainData.at(12, 3) = 1.6f;
trainData.at(13, 0) = 6.0999999f; trainData.at(13, 1) = 2.8f; trainData.at(13, 2) = 4.0f; trainData.at(13, 3) = 1.3f;
trainData.at(14, 0) = 5.8000002f; trainData.at(14, 1) = 2.7f; trainData.at(14, 2) = 4.0999999f; trainData.at(14, 3) = 1.0f;
cv::Mat trainLabels(15, 1, CV_32FC1);
trainLabels.at(0, 0) = 0; trainLabels.at(1, 0) = 0;
trainLabels.at(2, 0) = 0; trainLabels.at(3, 0) = 0;
trainLabels.at(4, 0) = 0; trainLabels.at(5, 0) = 0;
trainLabels.at(6, 0) = 1; trainLabels.at(7, 0) = 0;
trainLabels.at(8, 0) = 0; trainLabels.at(9, 0) = 0;
trainLabels.at(10, 0) = 1; trainLabels.at(11, 0) = 0;
trainLabels.at(12, 0) = 1; trainLabels.at(13, 0) = 0; trainLabels.at(14, 0) = 0;
cv::Mat layers = cv::Mat(3, 1, CV_32SC1);
layers.row(0) = cv::Scalar(trainData.cols);
layers.row(1) = cv::Scalar(4);
layers.row(2) = cv::Scalar(1);
nn->setLayerSizes(layers);
nn->train(trainData, cv::ml::SampleTypes::ROW_SAMPLE, trainLabels);
cv::Mat out;
nn->predict(trainData.row(6), out);
for (int y = 0; y< out.cols; y++) {
std::cout
Подробнее здесь: https://stackoverflow.com/questions/368 ... eturns-nan
OpenCV 3.1 ANN прогнозирует возврат nan ⇐ C++
Программы на C++. Форум разработчиков
1762511666
Anonymous
Я пытаюсь реализовать нейронную сеть с помощью библиотеки OpenCV ANN. У меня было рабочее решение, но после обновления до OpenCV 3.1 оно перестало работать. Поэтому я создал упрощенный код для тестирования, но проблема все еще остается. ИНС успешно обучена, но когда я пытаюсь вызвать предсказание со строкой из trainData, оно возвращает Mat значений nan. Код
cv::Ptr< cv::ml::ANN_MLP > nn = cv::ml::ANN_MLP::create();
nn->setActivationFunction(cv::ml::ANN_MLP::SIGMOID_SYM);
nn->setTrainMethod(cv::ml::ANN_MLP::BACKPROP);
nn->setBackpropMomentumScale(0.1);
nn->setBackpropWeightScale(0.1);
nn->setTermCriteria(cv::TermCriteria(cv::TermCriteria::MAX_ITER, (int)100000, 1e-6));
cv::Mat trainData(15, 4, CV_32FC1);
trainData.at(0, 0) = 5.5f; trainData.at(0, 1) = 3.5f; trainData.at(0, 2) = 1.3f; trainData.at(0, 3) = 0.2f;
trainData.at(1, 0) = 6.5f; trainData.at(1, 1) = 2.8f; trainData.at(1, 2) = 4.5999999f; trainData.at(1, 3) = 1.5f;
trainData.at(2, 0) = 6.3000002f; trainData.at(2, 1) = 2.3f; trainData.at(2, 2) = 4.4000001f; trainData.at(2, 3) = 1.3f;
trainData.at(3, 0) = 6.0f; trainData.at(3, 1) = 2.2f; trainData.at(3, 2) = 4.0f; trainData.at(3, 3) = 1.0f;
trainData.at(4, 0) = 4.5999999f; trainData.at(4, 1) = 3.0999999f; trainData.at(4, 2) = 1.5f; trainData.at(4, 3) = 0.2f;
trainData.at(5, 0) = 5.0f; trainData.at(5, 1) = 3.2f; trainData.at(5, 2) = 1.2f; trainData.at(5, 3) = 0.2f;
trainData.at(6, 0) = 7.4000001f; trainData.at(6, 1) = 2.8f; trainData.at(6, 2) = 6.0999999f; trainData.at(6, 3) = 1.9f;
trainData.at(7, 0) = 6.0f; trainData.at(7, 1) = 2.9000001f; trainData.at(7, 2) = 4.5f; trainData.at(7, 3) = 1.5f;
trainData.at(8, 0) = 5.0f; trainData.at(8, 1) = 3.4000001f; trainData.at(8, 2) = 1.5f; trainData.at(8, 3) = 0.2f;
trainData.at(9, 0) = 6.4000001f; trainData.at(9, 1) = 2.9000001f; trainData.at(9, 2) = 4.3000002f; trainData.at(9, 3) = 1.3f;
trainData.at(10, 0) = 7.1999998f; trainData.at(10, 1) = 3.5999999f; trainData.at(10, 2) = 6.0999999f; trainData.at(10, 3) = 2.5f;
trainData.at(11, 0) = 5.0999999f; trainData.at(11, 1) = 3.3f; trainData.at(11, 2) = 1.7f; trainData.at(11, 3) = 0.5f;
trainData.at(12, 0) = 7.1999998f; trainData.at(12, 1) = 3.0f; trainData.at(12, 2) = 5.8000002f; trainData.at(12, 3) = 1.6f;
trainData.at(13, 0) = 6.0999999f; trainData.at(13, 1) = 2.8f; trainData.at(13, 2) = 4.0f; trainData.at(13, 3) = 1.3f;
trainData.at(14, 0) = 5.8000002f; trainData.at(14, 1) = 2.7f; trainData.at(14, 2) = 4.0999999f; trainData.at(14, 3) = 1.0f;
cv::Mat trainLabels(15, 1, CV_32FC1);
trainLabels.at(0, 0) = 0; trainLabels.at(1, 0) = 0;
trainLabels.at(2, 0) = 0; trainLabels.at(3, 0) = 0;
trainLabels.at(4, 0) = 0; trainLabels.at(5, 0) = 0;
trainLabels.at(6, 0) = 1; trainLabels.at(7, 0) = 0;
trainLabels.at(8, 0) = 0; trainLabels.at(9, 0) = 0;
trainLabels.at(10, 0) = 1; trainLabels.at(11, 0) = 0;
trainLabels.at(12, 0) = 1; trainLabels.at(13, 0) = 0; trainLabels.at(14, 0) = 0;
cv::Mat layers = cv::Mat(3, 1, CV_32SC1);
layers.row(0) = cv::Scalar(trainData.cols);
layers.row(1) = cv::Scalar(4);
layers.row(2) = cv::Scalar(1);
nn->setLayerSizes(layers);
nn->train(trainData, cv::ml::SampleTypes::ROW_SAMPLE, trainLabels);
cv::Mat out;
nn->predict(trainData.row(6), out);
for (int y = 0; y< out.cols; y++) {
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/36871277/opencv-3-1-ann-predict-returns-nan[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия