用python学习神经网络-01.两层神经网络
作者:Sun zi chao     发布时间:2021-07-06 19:35:00    阅读次数:426
本系列文章,我将用Python语言、numpy工具演示神经网络的一些经典实现例子。希望能帮助对人工智能有兴趣的朋友。
现有数据


输入0,0,1,则输出0;输入1,1,1,则输出1……。这里面有什么规律呢?我们通过神经网络把它找出来。

依上表,输出的为样本为 X 为 4*3,有 4 个样本 3 个属性,每一个样本对于这一个真实值 y,为 4*1 的向量,我们要根据 input 的值输出与 y 值损失最小的输出。


两层神经网络

这里,我们选择简单的两层神经网络来求解。


输入层有3个神经元(因为有3个属性),输出为一个值,w1,w2,w3为其权重。输出为1个属性。

由于输出值的范围在0和1之间,因此前向传播函数采用Sigmoid函数。反向传播函数则是它的导数。


Sigmoid函数


Sigmoid函数的导数


源代码


	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))
		  
	# 输入数据集
	X = np.array([ [0,0,1],
	[1,1,1],
	[1,0,1],
	[0,1,1] ])
	  
	# 已知输出数据集
	y = np.array([[0,1,1,0]]).T
	  
	# 生成随机种子
	np.random.seed(1)
	  
	# 初始化权值
	syn0 = 2*np.random.random((3,1)) - 1
	  
	# 迭代次数
	for iter in xrange(10000):
		# 前向传播,l0也就是输入层
		l0 = X
		
		#计算预测值
		l1 = nonlin(np.dot(l0,syn0))
		
		# 计算与实际误差
		l1_error = y - l1
		
		# 返向求导的值乘以误差得到一小部份误差
		l1_delta = l1_error * nonlin(l1,True)
		
		# 利用一部份误差,更新权值
		syn0 += np.dot(l0.T,l1_delta)
		
	print "Output After Training:"
	print l1
	


运行结果,四个预测值和原来的[0,1,1,0]误差已经很小了



桂ICP备11003301号-1 公安备案号:45040302000027 Copyright @ 2021- 2022 By Sun zi chao

阅读统计: 1.93W 文章数量: 76 运行天数: 416天 返回cmnsoft