Python进行时:一个简单的神经网络实现及代码详解
来源:互联网 发布:psvita 电池 淘宝 编辑:程序博客网 时间:2024/04/30 12:16
神经网络是深度学习的基础,所以我认为,学习深度学习有两大基石,即:学好神经网络理论,学好实现理论的利器——Python。
一篇很好的文章,用Python编写了简单的BP神经网络,并几乎将所有代码解释了一遍。原文链接如下:http://python.jobbole.com/82758/
我在研究之后,自己试着重复那段程序,经过思考,终于理解了。下面是我在eclipse下编写的代码:
#-*-coding:utf-8 -*-import numpy as np#首先创建sigmoid函数def nonlin(x,deriv=False): if deriv==True: return x*(1-x) return 1/(1+np.exp(-x))#然后创建x和yx=np.array([[1,0,0], [0,0,1], [0,1,0], [1,0,1] ])y=np.array([[1,0,0,1]]).T#创建syn0,为权重矩阵。随机生成,注意控制其范围在-1到1syn0=2*np.random.random([3,1])-1#训练网络,开始循环。根据差别修改权重矩阵-更新l0层数据-循环n次for i in xrange(1000): #网络有两层,l0和l1. l0=x l1=nonlin(np.dot(l0,syn0)) l1_error=y-l1 l1_delta=l1_error*nonlin(l1,deriv=True) syn0+=np.dot(l0.T,l1_delta) print "the training result is:"print l1得到如下结果:
the training result is:
[[ 0.99849276]
[ 0.04149694]
[ 0.02333249]
[ 0.96630778]]
可以看出,这与标准答案[1,0,0,1]已经很接近了。
不过,这样的训练也有缺陷,那就是过拟合。(说明我最近看的相关论文确实不少,哈哈)也就是说,输入别的实例时,结果可能与真实情况相差甚远。解决过拟合当然也有很多种方法,但上述例子操作简便,又是一切的基础,所以先将其实现。
这样的情况与《数值分析》有点像:数值分析的基本思想就是线性化,一个拉格朗日插值公式能用在数值微分、数值积分等多个领域。所谓难者不会,会者不难。
通过这几天的学习,我对深度学习也有了新的想法:深度学习就是发现那些不明显的特征,并把它们区分出来。这与数字图像处理中的时域到频域的变换有些神似,不知是不是巧合。卷积神经网络我还没有细看,或许那种网络就是基于这个思想吧。
0 0
- Python进行时:一个简单的神经网络实现及代码详解
- 用Python 代码实现简单的神经网络
- 基于python实现一个简单的神经网络
- 一个 11 行 Python 代码实现的神经网络
- 一个 11 行 Python 代码实现的神经网络
- 一个 11 行 Python 代码实现的神经网络
- 一个 11 行 Python 代码实现的神经网络
- 一个 11 行 Python 代码实现的神经网络
- 一个 11 行 Python 代码实现的神经网络
- 一个 11 行 Python 代码实现的神经网络
- 一个 11 行 Python 代码实现的神经网络
- 一个 11 行 Python 代码实现的神经网络
- Python写一个简单的神经网络
- python简单实现神经网络
- BP神经网络的Python简单实现
- 简单BP神经网络的python实现
- 实现一个最简单的神经网络
- 【神经网络】11行Python代码实现的神经网络
- 微信小程序音频相关问题:播放,录音等相关
- sqlserver2012安装教程(新手篇)
- 安卓H5交互——让界面不再单一
- Toad for Oracle查看锁表和解锁被锁住的表
- Node实现数据库数据导入Excel
- Python进行时:一个简单的神经网络实现及代码详解
- 深入理解Java中的重写和重载
- 游戏产业高速发展
- 备用——欢迎使用CSDN-markdown编辑器
- Python之反转字符串
- QString 和 char* 之间的转换(以及QByteArray)
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
- 对servlet的简单了解
- HDFS-DataNode