跬步神经网络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 条评论
登录 后参与评论

相关文章

来自专栏瓜大三哥

基于FPGA的均值滤波(一)

均值滤波的数学表达式列出: ? 由上述公式列出求图像均值的步骤: (1)获取当前窗口所有像素。 (2)计算当前窗口所有像素之和。 (3)将(2)结果除以当前窗口...

2136
来自专栏人工智能LeadAI

解析Tensorflow官方PTB模型的demo

01 seq2seq代码案例解读 RNN 模型作为一个可以学习时间序列的模型被认为是深度学习中比较重要的一类模型。在Tensorflow的官方教程中,有两个与...

4418
来自专栏数据结构与算法

25:最长最短单词

25:最长最短单词 总时间限制: 1000ms 内存限制: 65536kB描述 输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格...

33810
来自专栏机器之心

教程 | 从零开始PyTorch项目:YOLO v3目标检测实现(下)

选自Medium 作者:Ayoosh Kathuria 机器之心编译 参与:Panda 前几日,机器之心编译介绍了《从零开始 PyTorch 项目:YOLO v...

1.6K6
来自专栏人工智能LeadAI

用CNN做句子分类:CNN Sentence Classification (with Theano code)

01 Intro 本篇文章来细说CNN在NLP中的一大应用————句子分类。通过Yoon Kim的论文介绍一个应用,分析代码,并重构代码。 重构后的代码放在gi...

5645
来自专栏PaddlePaddle

【RNN】使用RNN语言模型生成文本

导语 PaddlePaddle提供了丰富的运算单元,帮助大家以模块化的方式构建起千变万化的深度学习模型来解决不同的应用问题。这里,我们针对常见的机器学习任务,提...

4265
来自专栏fangyangcoder

tensorflow笔记(二)之构造一个简单的神经网络

http://www.cnblogs.com/fydeblog/p/7425200.html

762
来自专栏目标检测和深度学习

教程 | 从零开始PyTorch项目:YOLO v3目标检测实现(下)

1292
来自专栏null的专栏

优化算法——遗传算法

与遗传算法的第一次接触 遗传算法是我进入研究生阶段接触的第一个智能算法,从刚开始接触,到后来具体去研究,再到后来利用遗传算法完成了水利水电的程序设计比赛,整个过...

9316
来自专栏专知

【干货】手把手教你用苹果Core ML和Swift开发人脸目标识别APP

【导读】CoreML是2017年苹果WWDC发布的最令人兴奋的功能之一。它可用于将机器学习整合到应用程序中,并且全部脱机。CoreML提供的机器学习 API,包...

2816

扫码关注云+社区