单层感知器神经网络
2014-06-05 11:40
323 查看
/***********************************************************************/ /* 文件:MC_Neuron.h */ /* 版权: 转载请注明来自mni2005的博客[http://blog.csdn.net/mni2005] */ /* 作者: 莫问 */ /* 日期: 2014-06-04 */ /* 描述:单层感知器神经网络头文件 */ /***********************************************************************/ #ifndef _AFX_MC_NEURON_INCLUDE_H_ #define _AFX_MC_NEURON_INCLUDE_H_ class Neuron { public: Neuron(); public: bool Train(float expect, float mX1, float mX2); float Compute(float mX1, float mX2); void GetWeight(float &mX1, float &mX2); private: float ActivateFunc(float fSum); private: float m_Weight[2]; //权值向量 float m_Bias; //偏差 float m_alpha; //学习速率 }; #endif //_AFX_MC_NEURON_INCLUDE_H_
/***********************************************************************/ /* 文件:MC_Neuron.cpp */ /* 版权: 转载请注明来自mni2005的博客[http://blog.csdn.net/mni2005] */ /* 作者: 莫问 */ /* 日期: 2014-06-04 */ /* 描述: 单层感知器神经网络实现 */ /***********************************************************************/ #include "MC_Neuron.h" Neuron::Neuron() { m_Weight[0] = 0.01f; m_Weight[1] = 0.01f; m_Bias = 0.01f; m_alpha = 0.01f; } //激活函数 float Neuron::ActivateFunc(float Yn) { if(Yn >=0.0f) { return 1.0f; }else{ return 0.0f; } } float Neuron::Compute(float mX0, float mX1) { float Yn = m_Bias*1.0f + m_Weight[0]*mX0 + m_Weight[1]* mX1; return ActivateFunc(Yn); } void Neuron::GetWeight(float &mX1, float &mX2) { mX1 = m_Weight[0]; mX2 = m_Weight[1]; } bool Neuron::Train(float expect, float mX0, float mX1) { float Yn = Compute(mX0, mX1); //调整权值感知器向量 if( Yn != expect ) { m_Weight[0] += ( m_alpha * (expect - Yn) * mX0 ); m_Weight[1] += ( m_alpha * (expect - Yn) * mX1 ); m_Bias += ( m_alpha * (expect - Yn) * 1.0f ); return false; } return true; }
/***********************************************************************/ /* 文件:NeuronTest.cpp */ /* 版权: 转载请注明来自mni2005的博客[http://blog.csdn.net/mni2005] */ /* 作者: 莫问 */ /* 日期: 2014-06-04 */ /* 描述: 用逻辑与或运算,完成单层感知器神经网络测试 */ /***********************************************************************/ #include <stdio.h> #include <stdlib.h> #include "MC_Neuron.h" int main(int argc, char* argv[]) { /* //逻辑与 训练样本 float slps[][3] = { {1.0, 1.0, 1.0}, {0.0, 1.0, 0.0}, {1.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, }; */ //逻辑或 训练样本 float slps[][3] = { {1.0, 1.0, 1.0}, {0.0, 1.0, 1.0}, {1.0, 0.0, 1.0}, {0.0, 0.0, 0.0}, }; Neuron neuron; bool bOK; //开始训练 do{ bOK = true; for (int i=0; i<4; i++) { float* pSlp = slps[i]; if(!neuron.Train(pSlp[2], pSlp[0], pSlp[1])) { bOK = false; } } }while(!bOK); //训练结束,输出权值 float weight1, weight2; neuron.GetWeight(weight1, weight2); printf("weight1=%f, weight2=%f\n", weight1, weight2); //验证感知器训练结果 for (int i=0; i<4; i++) { float* pSlp = slps[i]; float fvalue = neuron.Compute(pSlp[0], pSlp[1]); printf("value=%f, expect=%f\n", fvalue, pSlp[2]); } system("pause"); return 0; }
相关文章推荐
- 使用nntool神经网络工具箱建立单层感知器
- 神经网络之单层感知器网络(人工智能)
- 【摘要与笔记1】-单层感知器,两层神经网络与深度学习
- 文本分类算法之--单层感知器的神经网络
- 神经网络学习之单层感知器
- 【神经网络】1:单层感知器解决异或问题
- 一个单层的基础神经网络实现手写字识别
- 笔记+R︱信用风险建模中神经网络激活函数与感知器简述
- 基于感知器模型的线性神经网络
- 单层神经网络、多层感知机、深度学习的总结
- 神经网络读书笔记:《神经网络与机器学习/Simon Haykin》第一章:感知器
- Tensorflow学习:单层神经网络的建立
- 笔记+R︱信用风险建模中神经网络激活函数与感知器简述
- 笔记+R︱信用风险建模中神经网络激活函数与感知器简述
- 神经网络学习笔记(一)感知器神经网络
- 人工神经网络入门(1) —— 单层人工神经网络应用示例
- 参数自适应的单层 bp 神经网络
- 译文 | 与TensorFlow的第一次接触 第四章:单层神经网络
- 神经网络与深度学习 1.1 感知器
- C++实现单层感知器网络_智能计算作业1