神经网络python 实现


感知器学习算法步骤如下:

1.对权系数w置初值

对权系数w=(W1 .W2 ,…,Wn ,Wn+1 )的各个分量置一个较小的零随机值,但Wn+1 =

—g。并记为Wl (0),W2 (0),…,Wn (0),同时有Wn+1(0)=-θ 。这里Wi (t)为t时刻从第i个

输入上的权系数,i=1,2,…,n。Wn+1 (t)为t时刻时的阀值。


图1-10 感知器的分类例子


2.输入一样本X=(X1 ,X2 ,…,Xn+1 )以及它的期望输出d。

期望输出值d在样本的类属不同时取值不同。如果x是A类,则取d=1,如果x是B类,则取-1。期望输出d也即是教师信号。

3.计算实际输出值Y

4.根据实际输出求误差e

e=d-Y(t)       (1-21)

5.用误差e去修改权系数

i=1,2,…,n,n+1      (1-22)

其中,η称为权重变化率,0<η≤1

# -*- coding: cp936 -*-
import numpy
import pylab
import sys

class neuralNetwork:
	b = 1
	learnRaito = 0.5
	trainData = numpy.array([[b,1,3],[b,2,3],[b,1,8],[b,2,15],[b,3,7],[b,4,29],[b,4,8],[b,4,20]])
	#训练数据 可以训练不同的方程 模型
	trainResult = numpy.array([1,1,-1,-1,1,-1,1,-1])
	weight = numpy.array([b,0,0])
	error = 0.001
	def Out(self,v):
		"""求值的取向"""
		if v>=0:
			return 1
		else:
			return -1

	def exceptSignal(self,oldw,inx):
				#a bug here
				#print '-'*20
				#print oldw
				#print inx
				#print numpy.dot(oldw.T,inx)
				#print '+'*20
				#return 1
				ans = numpy.dot(oldw.T,inx)
				return self.Out(ans)

	def trainOnce(self,oldw,inx,correctResult):
		"""one training"""
		error = correctResult - self.exceptSignal(oldw,inx)
		newWeight = oldw + self.learnRaito*error*inx
		self.weight = newWeight
		return error

	def getAbs(self,x):
		if x<0:
			return -x
		else:
			return x

	def trainWeight(self):
		"""traing the weight of data"""
		error = 1
		while error > self.error:
			i = 0
			error = 0

			for inx in self.trainData:
				error += self.getAbs(self.trainOnce(self.weight,inx,self.trainResult[i]))
				i = i+1

	def drawTrainResult(self):
		""" draw graph of Result"""
		xor = self.trainData[:,1]#切片,获取第一列,x坐标
		yor = self.trainData[:,2]#切片,获取第二列,y坐标
		pylab.subplot(111)
		xMax = numpy.max(xor)+15
		xMin = numpy.min(xor)-5
		yMax = numpy.max(yor)+50
		yMin = numpy.min(yor)-5
		pylab.xlabel(u'xor')
		pylab.ylabel(u'yor')
		pylab.xlim(xMin,xMax)
		pylab.ylim(yMin,yMax)

		#draw point
		for i in range(0,len(self.trainResult)):
			if self.trainResult[i] == 1:
				pylab.plot(xor[i],yor[i],'r*')
			else:
				pylab.plot(xor[i],yor[i],'ro')

	def drawTestResult(self,data):

		test = data#numpy.array(data)
		if self.exceptSignal(self.weight,test)>0:
			pylab.plot(test[1],test[2],'b*')
		else:
			pylab.plot(test[1],test[2],'bo')

	def drawTrueLine(self):
		"""真实函数分界线"""
		xtest = numpy.array(range(0,20))
		ytest = xtest*2+1.68
		pylab.plot(xtest,ytest,'g--')

	def showGraph(self):
		pylab.show()

testData = [[1,5,11],[1,5,12],[1,4,16],[1,6,7],[1,3,12],[1,2,22]]
neural = neuralNetwork()
print neural.Out(124.32423)
neural.trainWeight()
neural.drawTrainResult()
neural.drawTrueLine()
#neural.showGraph()
for test in testData:
	neural.drawTestResult(test)
print neural.weight
neural.showGraph()

红色是训练数据,蓝色是测试数据,圆点代表是在线上方,*代表在线下方,由图可知这个算法还不错

神经网络python 实现,布布扣,bubuko.com

时间: 2024-10-27 19:35:34

神经网络python 实现的相关文章

Boltzmann机神经网络python实现

(python 3) 1 import numpy 2 from scipy import sparse as S 3 from matplotlib import pyplot as plt 4 from scipy.sparse.csr import csr_matrix 5 import pandas 6 7 def normalize(x): 8 V = x.copy() 9 V -= x.min(axis=1).reshape(x.shape[0],1) 10 V /= V.max(a

入门神经网络-Python 实现(下)

回顾 紧接着上篇, 整到了, MES的公式和代码的实现. \(MSE = \frac {1}{n} \sum\limits_{i=1}^n (y_i - \hat y_i)^2\) n 表示样本数, 这里为 4 y 表示要预测的变量, 这里是 性别 训练的约束, 就是使得 MSE 的值尽可能小. -> 求解参数 MSE 的工作机制, 举个栗子, 假设网络的纵输出是 0, 也就是预测所有的 小伙伴都是 妹子. 姓名 \(y_i\) (真实值) \(\hat y_i\) (预测值) \((y_i -

补充(代码)-入门神经网络-Python 实现(下)

回顾 紧接着上篇, 整到了, MES的公式和代码的实现. \(MSE = \frac {1}{n} \sum\limits_{i=1}^n (y_i - \hat y_i)^2\) n 表示样本数, 这里为 4 y 表示要预测的变量, 这里是 性别 训练的约束, 就是使得 MSE 的值尽可能小. -> 求解参数 MSE 的工作机制, 举个栗子, 假设网络的纵输出是 0, 也就是预测所有的 小伙伴都是 妹子. 姓名 \(y_i\) (真实值) \(\hat y_i\) (预测值) \((y_i -

径向基(RBF)神经网络python实现

1 from numpy import array, append, vstack, transpose, reshape, 2 dot, true_divide, mean, exp, sqrt, log, 3 loadtxt, savetxt, zeros, frombuffer 4 from numpy.linalg import norm, lstsq 5 from multiprocessing import Process, Array 6 from random import sa

手写神经网络Python深度学习

import numpy import scipy.special import matplotlib.pyplot as plt import scipy.misc import glob import imageio import scipy.ndimage class neuralNetWork: def __init__(self,inputnodes,hiddennodes,outputnodes,learningrate): self.inodes = inputnodes self

IBM Python 技术专题

Python 技术专题 Python 是由 Guido van Rossum 开发的,可免费获得的.是一种非常高级的解释型语言.其语法简单易懂,而且面向对象的语义功能强大又灵活,Python 可以广泛使用并具有高度的可移植性.本专题内容包括可爱的 Python 系列.Python 探索系列.Python 扩展.使用 Python 进行各种应用开发等等. 可爱的 Python 系列 可爱的 Python:将 XML 和 Python 结合起来 介绍 Python 的 XML 工具 可爱的 Pyth

Python数据分析I

Python数据分析概述 数据分析的含义与目标 统计分析方法 提取有用信息 研究.概括.总结 Python与数据分析 Python: Guido Van Rossum Christmas Holiday, 1989 特点:简介 开发效率搞 运算速度慢(相对于C++和Java) 胶水特性(集成C语言) 数据分析:numpy.scipy.matplotlib.pandas.scikit-learn.keras Python数据分析大家族 numpy(Numeric Python): 数据结构基础.是

关于深度学习框架 TensorFlow、Theano 和 Keras

[TensorFlow] ——( https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/) 1.TensorFlow是啥? ——TensorFlow是Google开发的一款神经网络的Python外部的结构包,也是一个采用数据流图来进行数值计算的开源软件库.TensorFlow 让我们可以先绘制计算结构图, 也可以称是一系列可人机交互的计算操作, 然后把编辑好的Python文件 转换成 更高效的C++,并在后端进行计算

pytorch 入门指南

两类深度学习框架的优缺点 动态图(PyTorch) 计算图的进行与代码的运行时同时进行的. 静态图(Tensorflow <2.0) 自建命名体系 自建时序控制 难以介入 使用深度学习框架的优点 GPU 加速 (cuda) 自动求导 常用网络层的API PyTorch 的特点 支持 GPU 动态神经网络 Python 优先 命令式体验 轻松扩展 1.Pytorch简介 Pytorch是Facebook 的 AI 研究团队发布了一个基于 Python的科学计算包,旨在服务两类场合: 替代numpy