# 一篇文章教你用 11 行 Python 代码实现神经网络

Very simple Neural Network

## Two Layer Neural Network

1. 前向传播求损失 2. 反向传播更新w

import numpy as np # sigmoid function # deriv=ture 是求的是导数 def nonlin(x,deriv=False): if(deriv==True): return x*(1-x) return 1/(1+np.exp(-x)) # input dataset X = np.array([ [0,0,1], [1,1,1], [1,0,1], [0,1,1] ]) # output dataset y = np.array([[0,1,1,0]]).T # seed random numbers to make calculation np.random.seed(1) # initialize weights randomly with mean 0 syn0 = 2*np.random.random((3,1)) - 1 # 迭代次数 for iter in xrange(10000): # forward propagation # l0也就是输入层 l0 = X l1 = nonlin(np.dot(l0,syn0)) # how much did we miss? l1_error = y - l1 # multiply how much we missed by the # slope of the sigmoid at the values in l1 l1_delta = l1_error * nonlin(l1,True) # update weights syn0 += np.dot(l0.T,l1_delta) print "Output After Training:" print l1

# slope of the sigmoid at the values in l1 #nonlin(l1,True),这里是对sigmoid求导 #前向计算，反向求导 l1_delta = l1_error * nonlin(l1,True) # update weights syn0 += np.dot(l0.T,l1_delta)

Output After Training: Output After Training:[[ 0.00966449] [ 0.99211957] [ 0.99358898] [ 0.00786506]]123456123456

## Three Layer Neural Network

Output After Training:[[ 0.5] [ 0.5] [ 0.5] [ 0.5]]1234512345

import numpy as np def nonlin(x,deriv=False): if(deriv==True): return x*(1-x) return 1/(1+np.exp(-x)) X = np.array([[0,0,1], [0,1,1], [1,0,1], [1,1,1]]) y = np.array([[0], [1], [1], [0]]) np.random.seed(1) # randomly initialize our weights with mean 0 syn0 = 2*np.random.random((3,5)) - 1 syn1 = 2*np.random.random((5,1)) - 1 for j in xrange(60000): # Feed forward through layers 0, 1, and 2 l0 = X l1 = nonlin(np.dot(l0,syn0)) l2 = nonlin(np.dot(l1,syn1)) # how much did we miss the target value? l2_error = y - l2 if (j% 10000) == 0: print "Error:" + str(np.mean(np.abs(l2_error))) # in what direction is the target value? # were we really sure? if so, don't change too much. l2_delta = l2_error*nonlin(l2,deriv=True) # how much did each l1 value contribute to the l2 error (according to the weights)? l1_error = l2_delta.dot(syn1.T) # in what direction is the target l1? # were we really sure? if so, don't change too much. l1_delta = l1_error * nonlin(l1,deriv=True) syn1 += l1.T.dot(l2_delta) syn0 += l0.T.dot(l1_delta) print l2

Error:0.500628229093 Error:0.00899024507125 Error:0.0060486255435 Error:0.00482794013965 Error:0.00412270116481 Error:0.00365084766242 # 这一部分是最后的输出结果 [[ 0.00225305] [ 0.99723356] [ 0.99635205] [ 0.00456238]]

0 条评论

## 相关文章

### 机器学习（四）通过递归的矩阵向量空间预测组合语义摘要简介方法结果结论

Semantic Compositionality Through Recursive Matrix-Vector Spaces 摘要 单字矢量空间模型已经在学...

35570

### Logistic回归与梯度下降法

http://blog.csdn.net/acdreamers/article/details/44657979

23010

### 人工智能之机器学习CART算法解析

人工智能之机器学习主要有三大类：1）分类；2）回归；3）聚类。今天我们重点探讨一下CART算法。

14300

### 02 The TensorFlow Way（3）

Implementing Back Propagation 使用TensorFlow的好处之一是可以跟踪操作，并根据反向传播自动更新模型变量。如下，我们将介绍...

25060

10110

### 分类-回归树模型（CART）在R语言中的实现

CART模型 ，即Classification And Regression Trees。它和一般回归分析类似，是用来对变量进行解释和预测的工具，也是数据挖掘中...

47760

### R开发：常用R语言包介绍

r与python差异比较大的一个地方就是，python的机器学习算法集中程度比较高，比如sklearn，就集成了很多的算法，而R语言更多时候需要一个包一个包去了...

12150

48050

12620

### cs231n之SVM算法和SoftMax算法

1.环境搭建以及前置条件 1.前置环境： 1.mac 2.pycharm 3.python3 4.Anaconda 2.环境搭建： 1.官网下载并安装Ana...

34560