#http://python.jobbole.com/82758/
# import numpy as np
#
#
# # sigmoid function
# 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],
# [0, 1, 1],
# [1, 0, 1],
# [1, 1, 1]])
#
# # output dataset
# y = np.array([[0, 0, 1, 1]]).T
#
# # seed random numbers to make calculation
# # deterministic (just a good practice)
# np.random.seed(1)
#
# # initialize weights randomly with mean 0
# syn0 = 2 * np.random.random((3, 1)) - 1
#
# for iter in range(10000):
# # forward propagation
# 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)#反向传播,w = w + f(y) * l1_delta
# print("Output After Training:")
# print(l1) 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, 4)) - 1
syn1 = 2 * np.random.random((4, 1)) - 1 for j in range(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("Output After Training:")
print(l2)
# 1.
# 关于非线性转化方程(non - linear
# transformation
# function)
#
# sigmoid函数(S
# 曲线)用来作为activation
# function:
#
# 1.1
# 双曲函数(tanh)
#
# 1.2
# 逻辑函数(logistic
# function)
#
#
# 2.
# 实现一个简单的神经网络算法 import numpy as np def tanh(x):
return np.tanh(x) def tanh_deriv(x):
return 1.0 - np.tanh(x) * np.tanh(x) def logistic(x):
return 1 / (1 + np.exp(-x)) def logistic_derivative(x):
return logistic(x) * (1 - logistic(x)) class NeuralNetwork:
def __init__(self, layers, activation='tanh'):
"""
:param layers: A list containing the number of units in each layer.
Should be at least two values
:param activation: The activation function to be used. Can be
"logistic" or "tanh"
"""
if activation == 'logistic':
self.activation = logistic
self.activation_deriv = logistic_derivative
elif activation == 'tanh':
self.activation = tanh
self.activation_deriv = tanh_deriv self.weights = []
for i in range(1, len(layers) - 1):
#layers[i - 1]为前一输入层节点数 +1是加上一个偏置点,
#layers[i]为当前层的输出节点数 +1是加上一个偏置点,
self.weights.append((2 * np.random.random((layers[i - 1] + 1, layers[i] + 1)) - 1) * 0.25)
self.weights.append((2 * np.random.random((layers[i] + 1, layers[i + 1])) - 1) * 0.25) def fit(self, X, y, learning_rate=0.2, epochs=10000):
X = np.atleast_2d(X) #判断输入训练集是否为二维
temp = np.ones([X.shape[0], X.shape[1] + 1])
temp[:, 0:-1] = X # adding the bias unit to the input layer
X = temp
y = np.array(y) for k in range(epochs):
i = np.random.randint(X.shape[0])
a = [X[i]] #len(self.weights)为输出节点个数,每个输出节点对应了一组权值是weight中的一行self.weights[l]
for l in range(len(self.weights)): # going forward network, for each layer
# Computer the node value for each layer (O_i) using activation function
# a[l] 为输入数据的特征值 print(a[l])
print(self.weights[l])
a.append(self.activation(np.dot(a[l], self.weights[l]))) error = y[i] - a[-1] # Computer the error at the top layer
deltas = [error * self.activation_deriv(a[-1])] # For output layer, Err calculation (delta is updated error) # Staring backprobagation
for l in range(len(a) - 2, 0, -1): # we need to begin at the second to last layer
# Compute the updated error (i,e, deltas) for each node going from top layer to input layer
deltas.append(deltas[-1].dot(self.weights[l].T) * self.activation_deriv(a[l]))
deltas.reverse()
for i in range(len(self.weights)):
layer = np.atleast_2d(a[i])
delta = np.atleast_2d(deltas[i])
self.weights[i] += learning_rate * layer.T.dot(delta) def predict(self, x):
x = np.array(x)
temp = np.ones(x.shape[0] + 1)
temp[0:-1] = x
a = temp
for l in range(0, len(self.weights)):
a = self.activation(np.dot(a, self.weights[l]))
return a print("简单非线性关系数据集测试(XOR)")
# 1. 简单非线性关系数据集测试(XOR):
#
# X: Y
# 0 0 0
# 0 1 1
# 1 0 1
# 1 1 0 #from NeuralNetwork import NeuralNetwork
import numpy as np nn = NeuralNetwork([2,2,1], 'tanh')
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 1, 1, 0])
nn.fit(X, y)
for i in [[0, 0], [0, 1], [1, 0], [1,1]]:
print(i, nn.predict(i)) print("\n\n手写数字识别")
# 2. 手写数字识别:
#
# 每个图片8x8
# 识别数字:0,1,2,3,4,5,6,7,8,9 import numpy as np
from sklearn.datasets import load_digits
from sklearn.metrics import confusion_matrix, classification_report
from sklearn.preprocessing import LabelBinarizer
#from NeuralNetwork import NeuralNetwork
from sklearn.cross_validation import train_test_split digits = load_digits()
X = digits.data
y = digits.target
X -= X.min() # normalize the values to bring them into the range 0-1
X /= X.max() nn = NeuralNetwork([64,100,10],'logistic')
X_train, X_test, y_train, y_test = train_test_split(X, y)
labels_train = LabelBinarizer().fit_transform(y_train)
labels_test = LabelBinarizer().fit_transform(y_test)
print("start fitting")
nn.fit(X_train,labels_train,epochs=3000)
predictions = []
for i in range(X_test.shape[0]):
o = nn.predict(X_test[i] )
predictions.append(np.argmax(o))
print (confusion_matrix(y_test,predictions))
print (classification_report(y_test,predictions))

python 神经网络实例的更多相关文章

  1. 学习推荐《Python神经网络编程》中文版PDF+英文版PDF+源代码

    推荐非常适合入门神经网络编程的一本书<Python神经网络编程>,主要是三部分: 介绍神经网络的基本原理和知识:用Python写一个神经网络训练识别手写数字:对识别手写数字的程序的一些优化 ...

  2. python基础——实例属性和类属性

    python基础——实例属性和类属性 由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(objec ...

  3. python 发送邮件实例

    留言板回复作者邮件提醒 -----------2016-5-11 15:03:58-- source:python发送邮件实例

  4. python Cmd实例之网络爬虫应用

    python Cmd实例之网络爬虫应用 标签(空格分隔): python Cmd 爬虫 废话少说,直接上代码 # encoding=utf-8 import os import multiproces ...

  5. Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取

    很多网页的信息都是通过异步加载的,本文就举例讨论下此类网页的抓取. <工作细胞>最近比较火,bilibili 上目前的短评已经有17000多条. 先看分析下页面 右边 li 标签中的就是短 ...

  6. Python爬虫实例:爬取猫眼电影——破解字体反爬

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

  7. Python爬虫实例:爬取豆瓣Top250

    入门第一个爬虫一般都是爬这个,实在是太简单.用了 requests 和 bs4 库. 1.检查网页元素,提取所需要的信息并保存.这个用 bs4 就可以,前面的文章中已经有详细的用法阐述. 2.找到下一 ...

  8. python 创建实例--待完善

    今天好好琢磨一下 python 创建实例的先后顺序 一. 就定义一个普通类 Util (默认)继承自 object,覆写 new ,init 方法 class Util(object): def __ ...

  9. pcapng文件的python解析实例以及抓包补遗

    为了弥补pcap文件的缺陷,让抓包文件可以容纳更多的信息,pcapng格式应运而生.关于它的介绍详见<PCAP Next Generation Dump File Format> 当前的w ...

随机推荐

  1. 自己定义iOS上双击Home键图切换

    假设双击Home.会来到iOS App的switcher页面,在这儿列出了当前系统挂起的App, 上面有每一个App的切屏,相信大家都熟悉这个东东了. 它事实上是每一个App在挂起前,对App后个载屏 ...

  2. model模块

    所谓的模块就是一个独立的文件,文件与文件之间是相互封闭的. //-----------------modeltest.js----------------- export var webName = ...

  3. windows设置文件夹显示缩略图

      windows设置文件夹显示缩略图 CreateTime--2017年7月26日16:32:59Author:Marydon 为什么要显示缩略图? a.显示缩略图后,图片文件能够直接显示内容,不能 ...

  4. mysql last_insert_id() (转载)

    先来看看官方的说明 The ID that was generated is maintained in the server on a per-connection basis. This mean ...

  5. 微信小程序项目实战之豆瓣天气

    概述 微信小程序项目实战之豆瓣天气 详细 代码下载:http://www.demodashi.com/demo/10943.html 一.准备工作 1.注册微信小程序 2.在小程序设置中设置reque ...

  6. 王立平--svnserver搭建

    1.下载 2.安装打开. 3.新建存储库. ---------------------------------- 4.新建用户. watermark/2/text/aHR0cDovL2Jsb2cuY3 ...

  7. Linux索引节点(Inode)用满导致空间不足

    一.问题出现 在创建新目录和文件是提示“no space left on device”!按照以前的情况,很有可能是服务器空间又被塞满了,通过命令查看,发现还有剩余.再用df -i查看了一下/分区的索 ...

  8. C# 非顶端窗口截图 - 用于查找指定窗口并截图

    原文地址:http://blog.csdn.net/u013096568/article/details/53400389 panel上可以通过DrawToBitmap截图,不管是否在屏幕外是否有遮挡 ...

  9. WebForm 页面ajax 请求后台页面 方法

    function ReturnOperation(InventoryID) { //入库 接口 if (confirm('你确认?')) { $.ajax({ type: "post&quo ...

  10. [ASP.NET]使用uploadify上传图片,并在uploadify按钮上生成预览图

    目录 需求 主要代码 总结 需求 项目中有用到uploadify上传插件,给的原型就是上传成功后替换原来的图片.没办法需求在那儿,也不能修改需求吧,只能想办法解决问题了. 主要代码 修改uploadi ...