跬步神经网络2-C++简单实现

导语 不考虑性能,用c++简单实现NN网络,通过训练预测 XOR、AND、OR

目录

跬步神经网络1-基本模型解析

跬步神经网络2-C++简单实现

跬步神经网络3-MNIST手写库初步识别

跬步1 了解了bp神经网络的原理,这次动手实践。

代码在这里: https://git.coding.net/yj_3000/SimpleNN.git                       xcode工程,需要设置一下开发者账号                       windows是vs2012的工程

**代码大致结构: **主要包括3个类,Session、Layer 和 Unit。 Session 代表一套NN网络,可以配置激活函数、损失函数、数据填充方法等 Layer 代表网络中的一层,包含一个或者多个Unit Unit 代表神经元,实现了  UpdateO(更新输出值)    UpdateE(更新Error)                                           UpdateB(更新Bias)        UpdateW(更新权重)

简单训练方法: 1. 设置 input 所有 unit的 输出值 和 output 所有 unit 的目标值 2. 正向依次调用所有 unit 的 updateO 3. 反向依次调用所有 unit 的 updateE updateB updateW 4. 重复 epochs 次

目前实现了3种激活函数: logistic、tanh、relu

测试1 - (LogicFitting::run) : 1. 建立 2,2,1的网络,随机填充 2. 使用相同的网络、相同的参数(lr=0.013),设置不同的激活函数,开始训练 XOR 3. 退出条件          1)训练次数达到上限          2)预测结果与目标值的距离小于 0.01 结果如下图, 1) lr=0.013时, relu 表现最好

2)lr=0.3时, relu训练次数以内,没有达到要求

3)lr=0.9时, relu和tanh训练次数以内,都没有达到要求

测试2 - (LogicFitting::run1) : 1. 使用相同的网络, 调整 lr,看结果,     relu 在 lr > 0.33 之后就再也没有成功过,     尝试设置 lr = 0.31 ,然后多次随机填充网络,都会失败,无法成功     relu 太容易 die 了     这也引出另外一个问题,如何动态调整 lr

下一步打算使用 mnist 上的手写数字数据库,做识别手写数字的联系, 如果训练性能跟不上,尝试把一般的网络优化方式都实现,看看效果

这里借一张图: https://www.youtube.com/watch?v=yKKNr- QKz2Q&index=3&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49

蓝色线,表示 lr 太小,导致梯度下降很慢,有生之年系列 红色刚刚好 绿色比较尴尬,出现循环,         栗子(y=xx  y’=2x   想通过梯度下降求极小值, lr=1   x初始值是1,x1=1-1y’(1)=-1)         x会一直在 -1 和 1之间摇摆 黄色是lr设置太大,直接越过最低点

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

人脸检测dlib, mtcnnx对比,FDDB测试对比

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

4143
来自专栏瓜大三哥

基于FPGA的均值滤波(三)

基于FPGA的均值滤波(三) 之二维求和模块 在实现了窗口内一维行方向上的求和操作,现在要得到整个窗口内的像素之和,还必须将每一行的计算结果再叠加起来。但是每一...

2079
来自专栏贾志刚-OpenCV学堂

OpenCV3.3深度学习模块(DNN)应用-图像分类

DNN模块介绍 在OpenCV3.3版本发布中把DNN模块从扩展模块移到了OpenCV正式发布模块中,当前DNN模块最早来自Tiny-dnn,可以加载预先训练好...

5317
来自专栏图像识别与深度学习

2018-06-30 TensorFlow实战:SoftMax手写体MNIST识别(Python完整源码)

1354
来自专栏简书专栏

基于tensorflow+CNN的新闻文本分类

tensorflow是谷歌google的深度学习框架,tensor中文叫做张量,flow叫做流。 CNN是convolutional neural netwo...

3114
来自专栏CNN

MobileNet V1官方预训练模型的使用

MobileNet V1的网络结构可以直接从官方Github库中下载定义网络结构的文件,地址为:https://raw.githubusercontent.co...

4792
来自专栏ATYUN订阅号

【教程】利用Tensorflow目标检测API确定图像中目标的位置

深度学习提供了另一种解决“Wally在哪儿”(美国漫画)问题的方法。与传统的图像处理计算机视觉方法不同的是,它只使用了少量的标记出Wally位置的示例。 在我的...

6136
来自专栏人人都是极客

5.训练模型之利用训练的模型识别物体

接下来我们开始训练,这里要做三件事: 将训练数据上传到训练服务器,开始训练。 将训练过程可视化。 导出训练结果导出为可用作推导的模型文件。 配置 Pipelin...

3684
来自专栏Jack-Cui

Caffe学习笔记(一):CIFRA-10在Caffe上进行训练学习

运行平台:Ubuntu14.04     安装完Caffe后,如何开始学习Caffe呢?一个不错的方法就是从Caffe自带的examples开始学起。在caff...

2687
来自专栏计算机视觉与深度学习基础

【深度学习】使用tensorflow实现AlexNet

AlexNet是2012年ImageNet比赛的冠军,虽然过去了很长时间,但是作为深度学习中的经典模型,AlexNet不但有助于我们理解其中所使用的很多技巧,...

36810

扫码关注云+社区