,具有一定的学习能力。 ,如图像识别(人脸识别,车牌识别),声音识别方面已经有成熟的运用。举个简单的例子可以说明人工神经网络和传统算法的差别所在(等会也要实现):假设要解决这个问题:写一个程序,判断0,1,2,3...,则是模拟人的逻辑思维,对这个问题进行形式化和逻辑化:if(input模 2 ==零){input是偶数}else{input是奇数},则要提供一组正确的数据对处理这个问题的神经网络ANN进行训练:未进行训练的神经网络,就像刚出生的婴儿一样,什么都不懂。这个时候,你要教他0是偶数, 1是奇数....,教完之后问ANN懂了没有,懂了则停止训练(网络已经形成),(1){训练;if(测试通过) {跳出循环;} }训练完之后,,只需要模拟一个神经元即可,再复杂的问题,可能需要多个神经元,再再复杂,需要多层多神经元的配合来实现(以后再研究)下面是实现:[cpp]viewplaincopyprint?1./***************************************** 2. * 感知器判断数字奇偶性 3. * 4. * 关键点,阈值应该怎么定? 5. ****************************************/ 6.#include <> 7.#include <> 8.#include <> 9. 10. M[10]; /** 权值 **/ X[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; /** 输入向量 **/ Y[10] = {1, 0, 1, 0, 1, 0, 1, 0, 1, 0}; /** 理想输出向量, 0 表示奇数, 1表示偶数 **/ O[10]; /** 保存输出向量 **/ ST = 52; /** 阈值 **/ 16. 17. 18. 19./** 初始化权值 **/ initM () 21.{ 22. int x = 0; 23. srand ((unsigned int)time(0)); 24. for (x = 0; x < 10; ++x) { 25. /** 随机数在 0 - 99 之间 **/ 26. M[x] = rand () % 100; 27. } 28.} 29. 30./** 跃迁型激活函数 **/ active (int m, int x) 32.{ 33. int o = m * x; 34. if (o > ST) { 35. return 1; 36. } else { 37. return 0; 38. } 39.} 40. 41./** 计算输出向量 **/ calcY () 43.{ 44. int x = 0; 45. for (x = 0; x < 10; ++x) { 46. O[x] = active (M[x], X[x]); 47. } 48.} 49. 50. 51./** 根据实际输出向量和理想输出向量调整权向量, 52. 返回 实际输出和理想输出不匹配的数目 **/ adjustM () 54.{ 55. int err = 0; 56. int x = 0; 57. for (x = 0; x < 10; ++x) { 58. if (O[x] != Y[x]) 59. { 60. err ++; 61. if (0 == O[x]) { 62. M[x] += X[x]; 63. } else { 64. M[x] -= X[x]; 65. } 66. } 67. } 68. return
最简单的神经网络算法 来自淘豆网m.daumloan.com转载请标明出处.