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图像处理编程实例

本文来自企鹅号 - CVPy媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

数据可视化的10个关键术语

Format 交互方式 Interactive visualisations allow you to modify, manipulate and explo...

21770
来自专栏大数据挖掘DT机器学习

【案例】SPSS商业应用系列第3篇:最近邻元素分析模型

应用 IBM SPSS Statistic 的最近邻元素分析模型对汽车厂商预研车型进行市场评估。 某汽车厂商的研发部门提出了多个预研车型的技术指标...

530100
来自专栏人工智能LeadAI

机器学习实战 | 第一章:sklearn常用工具介绍

写在前面: 花了大力气学了很多的理论,也用Python实现了其中大部分的算法.接下来开始就进入实战阶段了. 实战阶段有三个重点: 1.选择合适的机器学习框...

304100
来自专栏新智元

深度学习挑战冯·诺依曼结构

【新智元导读】想挑战冯·诺依曼,就必须从三个要素入手:基本操作,例如加减乘除;逻辑流程控制,例如if-else-then,for,while;设存储器,内存和硬...

411110
来自专栏深度学习自然语言处理

【python】Tkinter可视化窗口(三)

我们的最终效果就是移动scale里面的bar,使得上面的黄色label显示该值并保留两位小数。

14530
来自专栏数说戏聊

Tableau基础知识1.文件与数据1.1 Tableau文件类型2.制表3.绘图

15320
来自专栏IT派

从框架优缺点说起,这是一份TensorFlow入门极简教程

这一系列教程分为 6 部分,从为什么选择 TensorFlow 到卷积神经网络的实现,介绍了初学者所需要的技能。机器之心在本文介绍了 PyTorch 和 Caf...

22120
来自专栏懒人开发

(7.1)James Stewart Calculus 5th Edition:Integration by Parts

注意: 这样做,目的是为了 降阶, 如果转换后,对应的没有起到 降阶 的作用,就没有什么意义了

12010
来自专栏新智元

PyTorch 最新版发布:API 变动,增加新特征,多项运算和加载速度提升

【新智元导读】PyTorch 发布了最新版,API 有一些变动,增加了一系列新的特征,多项运算或加载速度提升,而且修改了大量bug。官方文档也提供了一些示例。 ...

65970
来自专栏企鹅号快讯

输验证码输到崩溃?教你15分钟黑掉全球最流行的验证码插件

大数据文摘作品 编译:Katrine Ren、朝夕、钱天培 验证码这种东西真的是反人类。虽然它在保证账号安全、反作弊以及反广告有着至关重要的作用,但对于普通用户...

28380

扫码关注云+社区

领取腾讯云代金券