首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C+实现神经网络之四—神经网络的预测和输入输出的解析

在上一篇的结尾提到了神经网络的预测函数predict(),说道predict调用了forward函数并进行了输出的解析,输出我们看起来比较方便的值。

神经网络的预测函数predict()

函数和函数的区别相信很容易从名字看出来,那就是输入一个样本得到一个输出和输出一组样本得到一组输出的区别,显然应该是循环调用实现的。所以我们先看一下的代码:

可以在第二个if语句里面看到最主要的内容就是两行:

分别是前面提到的前向传播和输出解析。

前向传播得到最后一层输出层layerout,然后从layerout中提取最大值的位置,最后输出位置的y坐标。

输出的组织方式和解析

之所以这么做,就不得不提一下标签或者叫目标值在这里是以何种形式存在的。以激活函数是sigmoid函数为例,sigmoid函数是把实数映射到[0,1]区间,所以显然最后的输出y:0

这里采用的方案是,把输出层设置为一个单列十行的矩阵,标签是几就把第几行的元素设置为1,其余都设为0。由于编程中一般都是从0开始作为第一位的,所以位置与0-9的数字正好一一对应。我们到时候只需要找到输出最大值所在的位置,也就知道了输出是几。

当然上面说的是激活函数是sigmoid的情况。如果是tanh函数呢?那还是是几就把第几位设为1,而其他位置全部设为-1即可。

如果是ReLU函数呢?ReLU函数的至于是0到正无穷。所以我们可以标签是几就把第几位设为几,其他为全设为0。最后都是找到最大值的位置即可。

这些都是需要根据激活函数来定。代码中是调用opencv的函数来寻找矩阵中最大值的位置。

输入的组织方式和读取方法

既然说到了输出的组织方式,那就顺便也提一下输入的组织方式。生成神经网络的时候,每一层都是用一个单列矩阵来表示的。显然第一层输入层就是一个单列矩阵。所以在对数据进行预处理的过程中,这里就是把输入样本和标签一列一列地排列起来,作为矩阵存储。标签矩阵的第一列即是第一列样本的标签。以此类推。

值得一提的是,输入的数值全部归一化到0-1之间。

由于这里的数值都是以类型保存的,这种数值的矩阵Mat不能直接保存为图片格式,所以这里我选择了把预处理之后的样本矩阵和标签矩阵保存到xml文档中。在源码中可以找到把原始的csv文件转换成xml文件的代码。在中。而我转换完成的MNIST的部分数据保存在data文件夹中,可以在Github上找到。

在opencv中xml的读写非常方便,如下代码是写入数据:

而读取代码的一样简单明了:

我写了一个函数从xml文件中从指定的列开始提取一定数目的样本和标签。默认从第0列开始读取,只是上面函数的简单封装:

至此其实已经可以开始实践,训练神经网络识别手写数字了。只有一部分还没有提到,那就是模型的保存和加载。下一篇将会讲模型的save和load,然后就可以实际开始进行例子的训练了。等不及的小伙伴可以直接去github下载完整的程序开始跑了。

源码链接

回复“神经网络”获取神经网络源码的Github链接。

你们不要看到送书就忽略代码了,一边读书一边调代码,理论与实践并重才是王道啊。

继续送书!

圣诞送的三本书已经全部抵达幸运小伙伴的手中。而且本期送书活动的前两本书的三个名额的结果也已经揭晓,出门左转即可看到。

上次主页君原话是这样的:

由于准备仓促,此次赠书数量不多,不过以后还有机会,主页君会为大家多多争取。大家一起努力,大家越给力,主页君越有底气。

是的,上次送了三本,但是大家很不过瘾,主页君说了会为大家多多争取的!这次主页君蒙电子工业出版社赞助,为大家准备了6个三本:包含OpenCV类书籍四本,机器学习类书籍两本,每本书送出三份,一共十八个名额。这六种书籍都是干货满满的书籍。这六种书分别是:

《OpenCV3编程入门》

《OpenCV算法精解:基于Python与C++》

《OpenCV编程案例详解》

《OpenCV图像处理编程实例》

《机器学习——Python实践》

《机器学习之路——Caffe、Keras、scikit-learn实战》

本次神经网络系列一共六篇,每篇送出一种书,三本。六种书的介绍也可以出门左转看到。今天送出我们的第四个三本。

后面几本书主页君就没看过了,所以木有“主页君书评”。

今天要送的书

OpenCV图像处理编程实例

书籍简介

《OpenCV图像处理编程实例》以OpenCV开源库为基础实现图像处理领域的很多通用算法,并结合当今图像处理领域前沿技术,对多个典型工程实例进行讲解及实现。全书内容覆盖面广,由基础到进阶,各个技术点均提供详细的代码实现,以帮助读者快速上手和深入学习。

《OpenCV图像处理编程实例》内容共三个部分,其中1~2章为基础篇,3~6章为进阶篇,7~9章为高级篇。第一部分基础篇主要介绍OpenCV开发基础的相关知识,让读者熟悉图像处理开发环境以及简单的图像处理操作;第二部分进阶篇主要介绍图像处理技术,包括灰度变换技术、平滑技术、边缘检测及形态学技术;第三部分高级篇主要介绍图像应用技术,包括图像分割技术、特征分析和复杂视频处理技术。进阶篇与高级篇的每章末节均提供了与本章内容相关的应用实例,意在让读者更好理解知识点,进而有效地进行图像处理开发。

适用读者

《OpenCV图像处理编程实例》适合图像处理、计算机视觉及模式识别等相关领域学习和工作的人士阅读,也可作为其他相关领域研究工作者的参考资料。

赠送办法

转发本文至朋友圈,截图发至公众号后台。并在本文下方留言,留言最好要跟本公众号主题相关。(不要只发截图不留言啊,留言才是最后的评选标准。)

最后从点赞最多的留言中抽取前两名读者送出两本。(呼朋唤友来给自己的留言点赞了,不用关注也能点赞哦)

除前两名之外,主页君再从其他留言中抽取一条精彩的送出一本。(主页君的保留小权利~)

最后选出三位读者,将个人收货信息发给我,我们会尽快寄送图书。

补充:每篇文章下面的留言活动只针对当篇推荐的书,想要其他书的还请耐心等待推荐那本书的文章发出来。

截止日期

系列文章每篇文章下面的活动的截止日期都不一样。

本文推荐这本书的活动截止日期是:

2018年1月2日晚23点59分59秒。即明天晚上十二点整。

第三本书,也即第三篇推荐的书籍的统计截止日期是今晚十二点整。想要书的小伙伴抓紧时间呼朋唤友来给自己的留言点赞了~

另,前两本书籍的三个名额都已经揭晓,出门左转可见。

最后

而且主页君这么给力了,大家也要不吝赞赏哦,给主页君更多动力~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180101G06UF100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券