f (ret != 0) { fprintf(stderr, "single_hidden_layer(two categories) train fail: %d\n", ret); return -1; } return 0; } int test_single_hidden_layer_predict() { const std::string image_path{ "E:/GitCode/NN_Test/data/images/digit/handwriting_0_and_1/" }; cv::Mat data, labels, result; for (int i = 11; i < 21; ++i) { const std::vector
label{ "0_", "1_" }; for (const auto& value : label) { std::string name = std::to_string(i); name = image_path + value + name + ".jpg"; cv::Mat image = cv::imread(name, 0); if (image.empty()) { fprintf(stderr, "read image fail: %s\n", name.c_str()); return -1; } data.push_back(image.reshape(0, 1)); } } data.convertTo(data, CV_32F); std::unique_ptr
tmp(new int[20]); for (int i = 0; i < 20; ++i) { if (i % 2 == 0) tmp[i] = 0; else tmp[i] = 1; } labels = cv::Mat(20, 1, CV_32SC1, tmp.get()); CHECK(data.rows == labels.rows); const std::string model{ "E:/GitCode/NN_Test/data/single_hidden_layer.model" }; ANN::SingleHiddenLayer
shl; int ret = shl.load_model(model); if (ret != 0) { fprintf(stderr, "load single_hidden_layer(two categories) model fail: %d\n", ret); return -1; } for (int i = 0; i < data.rows; ++i) { float probability = shl.predict((float*)(data.row(i).data), data.cols); fprintf(stdout, "probability: %.6f, ", probability); if (probability > 0.5) fprintf(stdout, "predict result: 1, "); else fprintf(stdout, "predict result: 0, "); fprintf(stdout, "actual result: %d\n", ((int*)(labels.row(i).data))[0]); } return 0; }
执行结果如下:由执行结果可知,测试图像全部分类正确。
|