MNIST字符识别(C++)

news/2024/12/23 6:39:48/

构建网络

采用官方示例的的lenet网络

训练

相关文件都已编译好,下载后执行命令即可

.\caffe-bin.exe  train --solver .\lenet_solver.prototxt

识别

#include <caffe/caffe.hpp>#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>#include <string>
#include <vector>using namespace caffe;
using std::string;int main(int argc, char** argv)
{fLI::FLAGS_minloglevel = 2;string model_file   = "lenet_deploy.prototxt";string trained_file = "lenet_iter_10000.caffemodel"; //for visualizationstring img_file = "Fmnist_images/test/test_0_7.jpg";Caffe::set_mode(Caffe::CPU);shared_ptr<Net<float> > net;/* Load the network. */net.reset(new Net<float>(model_file, caffe::TEST));net->CopyTrainedLayersFrom(trained_file);CHECK_EQ(net->num_inputs(), 1) << "Network should have exactly one input.";CHECK_EQ(net->num_outputs(), 1) << "Network should have exactly one output.";//net->set_debug_info(true);Blob<float>* input_layer = net->input_blobs()[0];int num_channels = input_layer->channels();int input_height = input_layer->height();int input_width = input_layer->width();CHECK(num_channels == 3 || num_channels == 1) << "Input layer should have 1 or 3 channels.";input_layer->Reshape(1, num_channels, input_height, input_width);/* Forward dimension change to all layers. */net->Reshape();std::vector<cv::Mat> input_channels;float* input_data = input_layer->mutable_cpu_data();for (int i = 0; i < input_layer->channels(); ++i) {cv::Mat channel(input_height, input_width, CV_32FC1, input_data);input_channels.push_back(channel);input_data += input_height * input_width;}// Input Datacv::Mat img = cv::imread(img_file, 1);CHECK(!img.empty()) << "Unable to decode image " << img_file;cv::Mat sample_resized;cv::resize(img, sample_resized, cv::Size(input_width, input_height));cv::Mat sample_float;if (num_channels == 3)sample_resized.convertTo(sample_float, CV_32FC3);elsesample_resized.convertTo(sample_float, CV_32FC1);sample_float *= 0.00390625;/* This operation will write the separate BGR planes directly to the* input layer of the network because it is wrapped by the cv::Mat* objects in input_channels. */cv::split(sample_float, input_channels);CHECK(reinterpret_cast<float*>(input_channels.at(0).data) == net->input_blobs()[0]->cpu_data())<< "Input channels are not wrapping the input layer of the network.";// predictnet->Forward();/* Copy the output layer to a std::vector */Blob<float>* output_layer = net->output_blobs()[0];std::cout << "output_blob(n,c,h,w) = " << output_layer->num() << ", " << output_layer->channels() << ", "<< output_layer->height() << ", " << output_layer->width() << std::endl;for (int n = 0; n<output_layer->num(); n++) {for (int c = 0; c < output_layer->channels(); c++) {for (int h = 0; h<output_layer->height(); h++) {for (int w = 0; w<output_layer->width(); w++) {				  std::cout << "output_blob(n,c,h,w) = " << n << ", " << c << ", "<< h << ", " << w<<":"<< output_layer->data_at(n, c, h, w) << std::endl;}}}}}

下载地址


http://www.ppmy.cn/news/1150082.html

相关文章

Springboot 多模块(A依赖B)集成mybatis , mybatis.mapper-locations 配置多个mapper路径配置

文章目录 一、问题概述二、问题分析 一、问题概述 最近在用SpringBoot 多模块 集成mybatis&#xff0c;模块A 依赖于模块B, 模块A 和模块B 各自有各自的业务逻辑和mapper 文件&#xff0c;模块A 的mapper xml 文件存放在resource 下的 mybatisMapper 文件夹&#xff0c;模块B …

Java学数据结构(4)——PriorityQueue(优先队列) 二叉堆(binary heap)

前言 数据结构与算法作为计算机科学的基础&#xff0c;是一个重点和难点&#xff0c;在实际编程中似乎看不它们的身影&#xff0c;但是它们有随处不在&#xff0c;如影随形。 本系列博客是《数据结构与算法分析—Java语言描述》的读书笔记&#xff0c;合集文章列表如下&#…

Ant Vue Table 合并单元格

项目开发中&#xff0c;有时候需要实现单元格合并的需求,这里记录一下在Ant Design Vue的实现。 <template><div><a-table bordered :data-source"dataSource" :columns"columns"></a-table></div> </template> <…

“.NET视频总结:认识框架的结构和组件,掌握开发工具的奥妙“

目录 第一单元&#xff1a;二十一世纪程序执行 背景: 总结&#xff1a; 第二单元:对象导向与类别设计 背景: 总结&#xff1a; 第三单元&#xff1a;使用类别与基底类别库 背景: 总结: 第四单元:Windows开发程序 背景: 总结: 第五单元:防护式程序设计 背景: 总结…

惊~第一次看见拥有上千种情绪的配音软件

随着新媒体发展的越来越好&#xff0c;大家对于视频制作的要求也越来越高&#xff0c;尤其是影视解说博主对于配音的需求&#xff0c;普通的配音软件已经无法满足了&#xff0c;正好我最近发现了一个超级强大的配音软件&#xff0c;里面居然拥有上千种情绪效果&#xff0c;无论…

帆软报表之填报报表

1、配置数据源 URL填充格式&#xff1a;jdbc:mysql://127.0.0.1:3306/yq_iwater_ads 2、新建普通报表&#xff0c;配置数据库查询 3、编辑单元格 3.1、插入公式 ‘每月营业厅情况统计\n’ replace($month_id,‘-’,‘年’)‘月’ 3.2、插入数据列 3.3、关联数据列 3.4、隐藏不…

Harmony ArkTS语言

ArkTS语言 前言正文一、声明式UI二、数据列表① 创建ArkTS文件② 添加资源③ 样式④ 组件⑤ 标题组件⑥ 列表头组件⑦ 列表Item组件⑧ 组件生命周期⑨ 渲染列表数据⑩ 单选 三、源码 随着华为宣布鸿蒙后续的版本不再兼容Android应用之后&#xff0c;对于现在的开发环境来说有一…

Zabbix登录页面出现数据库访问异常

问题概述 这是我遇到过最无语的一套zabbix服务器部署&#xff0c;也不知道是否有心要刁难我…搞定一波又来一波&#xff0c;每次都不重样的。这次是客户自己不知道倒腾什么东西&#xff0c;竟然是将zabbix密码给改了的。他的意思是项目完毕&#xff0c;公司规定必须要将密码进…