介绍
这篇文章将为大家详细讲解有关Python实现神经网络算法及应用的具体代码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Python实现神经网络算法及应用的具体代码如下
首先用Python实现简单地神经网络算法:
import numpy as np #,定义双曲正切函数 def 双曲正切(x): return 才能np.tanh (x) #,双曲正切函数的导数 def tan_deriv (x): return 1.0,才能成功;np.tanh (x), *, np.tan (x) #,乙状结肠函数 def 物流(x): return 才能;1,/,(1,+,np.exp (- x)) #,乙状结肠函数的导数 def logistic_derivative (x): return 才能;物流(x), *,(1,安康;物流(x)) class NeuralNetwork: def 才能;__init__(自我,,,,激活=& # 39;双曲正切# 39;): ,,,,,, ,,,神经网络算法构造函数 ,,,:param 层:,神经元层数 ,,,:param 激活:,使用的函数(默认双曲正切函数) ,,:返回:没有 ,,,,,, ,,,if activation ==, & # 39;物流# 39;: ,,,,,self.activation =物流 ,,,,,self.activation_deriv =logistic_derivative ,,,elif activation ==, & # 39;双曲正切# 39;: ,,,,,self.activation =,双曲正切 ,,,,,self.activation_deriv =tan_deriv ,,,#,权重列表 ,,,self.weights =, [] ,,,#,初始化权重(随机) ,,,for 小姐:拷贝范围(1,len(层),安康;1): ,,,,,self.weights.append ((2, *, np.random.random((层[小姐,安康;1],+,1,层[我],+,- 1)),安康;1),*,0.25) ,,,,,self.weights.append ((2, *, np.random.random((层[我],+,1,层(小姐:+,- 1))),安康;1),*,0.25) def 才能;适合(自我,,X,, y,, learning_rate=0.2,,时代=10000): ,,,,,, ,,,训练神经网络 ,,,:param X:,数据集(通常是二维) ,,,:param y:,分类标记 ,,,:param learning_rate:,学习率(默认0.2) ,,,:param 时代:,训练次数(最大循环次数,默认10000) ,,,:返回:没有 ,,,,,, ,,,#,确保数据集是二维的 ,,,X =, np.atleast_2d (X) ,,,temp =, np.ones ([X.shape [0],, X.shape [1], +, 1]) ,,,临时(:,,0:,1],=,X ,,,X =temp ,,,y =, np.array (y) ,,,for k 拷贝范围(时代): ,,,,,#,随机抽取X的一行 ,,,,,小姐:=,np.random.randint (X.shape [0]) ,,,,,#,用随机抽取的这一组数据对神经网络更新 ,,,,,a =, [X[我]] ,,,,,#,正向更新 ,,,,,for l 拷贝范围(len (self.weights)): ,,,,,,,a.append (self.activation (np.dot ([l],, self.weights [l]))) ,,,,,error =, y[我],安康;[1] ,,,,,deltas =, (error *, self.activation_deriv ([1])) ,,,,,#,反向更新 ,,,,,for l 拷贝范围(len (a),安康;2,,0,1): ,,,,,,,deltas.append(三角洲[1]. dot (self.weights [l] .T), *, self.activation_deriv ([l])) ,,,,,,,deltas.reverse () ,,,,,for 小姐:拷贝范围(len (self.weights)): ,,,,,,,layer =, np.atleast_2d([我]) ,,,,,,,delta =, np.atleast_2d(三角洲[我]) ,,,,,,,self.weights[我],+=,learning_rate *, layer.T.dot(δ) def 才能预测(自我,,x): ,,,x =, np.array (x) ,,,temp =, np.ones (x.shape [0], +, - 1) ,,,临时[0,1],=,x ,,,a =temp ,,,for l 拷贝范围(0,,len (self.weights)): ,,,,,a =, self.activation (np.dot (a, self.weights [l])) ,,,return 一个
使用自己定义的神经网络算法实现一些简单的功能:
,小案例:
X:,,,,,,,,,,,,,,,,,null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null