前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C+实现神经网络之三—神经网络的训练和测试

C+实现神经网络之三—神经网络的训练和测试

作者头像
企鹅号小编
发布2018-01-10 17:07:19
7720
发布2018-01-10 17:07:19
举报
文章被收录于专栏:人工智能人工智能人工智能

前言

在之前的博客中我们已经实现了Net类的设计和前向传播和反向传播的过程。可以说神经网络的核心的部分已经完成。接下来就是应用层面了。要想利用神经网络解决实际的问题,比如说进行手写数字的识别,需要用神经网络对样本进行迭代训练,训练完成之后,训练得到的模型是好是坏,我们需要对之进行测试。这正是我们现在需要实现的部分的内容。

完善后的Net类

需要知道的是现在的Net类已经相对完善了,为了实现接下来的功能,不论是成员变量还是成员函数都变得更加的丰富。现在的Net类看起来是下面的样子:

可以看到已经有了训练的函数train()、测试的函数test(),还有实际应用训练好的模型的predict()函数,以及保存和加载模型的函数save()和load()。大部分成员变量和成员函数应该还是能够通过名字就能够知道其功能的。

训练函数train()

本文重点说的是训练函数train()和测试函数test()。这两个函数接受输入(input)和标签(或称为目标值target)作为输入参数。其中训练函数还要接受一个阈值作为迭代终止条件,最后一个函数可以暂时忽略不计,那是选择要不要把loss值实时画出来的标识。

训练的过程如下:

接受一个样本(即一个单列矩阵)作为输入,也即神经网络的第一层;

进行前向传播,也即forward()函数做的事情。然后计算loss;

如果loss值小于设定的阈值loss_threshold,则进行反向传播更新阈值;

重复以上过程直到loss小于等于设定的阈值。

train函数的实现如下:

这里考虑到了用单个样本和多个样本迭代训练两种情况。而且还有另一种不用loss阈值作为迭代终止条件,而是用正确率的train()函数,内容大致相同,此处略去不表。

在经过train()函数的训练之后,就可以得到一个模型了。所谓模型,可以简单的认为就是权值矩阵。简单的说,可以把神经网络当成一个超级函数组合,我们姑且认为这个超级函数就是y = f(x) = ax +b。那么权值就是a和b。反向传播的过程是把a和b当成自变量来处理的,不断调整以得到最优值或逼近最优值。在完成反向传播之后,训练得到了参数a和b的最优值,是一个固定值了。这时自变量又变回了x。我们希望a、b最优值作为已知参数的情况下,对于我们的输入样本x,通过神经网络计算得到的结果y,与实际结果相符合是大概率事件。

测试函数test()

test()函数的作用就是用一组训练时没用到的样本,对训练得到的模型进行测试,把通过这个模型得到的结果与实际想要的结果进行比较,看正确来说到底是多少,我们希望正确率越多越好。

test()的步骤大致如下几步:

用一组样本逐个输入神经网络;

通过前向传播得到一个输出值;

比较实际输出与理想输出,计算正确率。

test()函数的实现如下:

这里在进行前向传播的时候不是直接调用forward()函数,而是调用了predict_one()函数,predict函数的作用是给定一个输入,给出想要的输出值。其中包含了对forward()函数的调用。还有就是对于神经网络的输出进行解析,转换成看起来比较方便的数值。

这一篇的内容已经够多了,我决定把对于predict部分的解释放到下一篇。

源码链接

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

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

继续送书!

圣诞送的三本书已经全部抵达幸运小伙伴的手中。而且本期送书活动的第一本书(即系列文章第一篇推荐的书)的三个名额的结果也已经揭晓,出门左转即可看到。

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

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

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

《OpenCV3编程入门》

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

《OpenCV编程案例详解》

《OpenCV图像处理编程实例》

《机器学习——Python实践》

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

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

今天要送的书

主页君书评

这本书也是电工社王静编辑赠送的。是一本以案例为导向的书籍。适合看完前两本之后提高来用。而且大部分数据都是直接进行图像处理,这本书的内容再图像处理的时候是有界面的,用了非常好用的Qt,所以变成的时候看到的不只是干巴巴的黑窗口输出信息了。本书的例子由浅入深,从最开始的翻转缩放滤波边缘检测等,慢慢地到加密系统、手写数字识别系统、图像检索系统等。适合学习了OpenCV和图像处理的基础知识,作为实践项目练手。

书籍简介

《OpenCV编程案例详解》以实例介绍了如何使用OpenCV构建计算机视觉系统,主要包括常用函数介绍类系统和应用类系统两类。

常用函数介绍类系统以介绍函数的使用为主。在这类系统中主要介绍了常用OpenCV函数的使用方法,并对这些函数进行了不同形式的参数调用。

应用类系统尝试解决一些实际问题,用最简单的方法实现一个学习系统,让读者能够了解该类系统的主要算法、解决问题的基本思路,同时能够更深入地了解如何更好地使用OpenCV处理实际问题。

各章的内容相对独立,因此不需要按照顺序从第1章开始阅读,读者可以自由选择自己感兴趣的内容来学习。《OpenCV编程案例详解》中的全部系统均以当前的最新版本OpenCV3.0版本进行介绍。《OpenCV编程案例详解》在处理问题时,尽量屏蔽了无关的细节,即将OpenCV作为一个黑盒来使用。

适用读者

《OpenCV编程案例详解》能够为在校学生、教师、入门者、专业人员、爱好者等不同身份的读者提供参考。

赠送办法

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

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

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

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

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

截止日期

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

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

2018年1月1日晚23点59分59秒。也可以认为是元旦当晚24点整。

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

最后

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

本文来自企鹅号 - CVPy媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - CVPy媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档