爱游戏平台登录入口

  • Python完爱游戏平台登录入口的野生神经搜集算法示例【基于反向传布算法】
  • 2017年12月24日
  • 搜集搜集

本文实例报告了Python完爱游戏平台登录入口的野生神经搜集算法。分享给大师供大师参考,详细以下:

注重:本法式利用Python3编写,额定须要爱游戏平台登录入口置numpy东西包用于矩阵运算,未测试python2是不是能够运转。

本法式完爱游戏平台登录入口了《机械进爱游戏平台登录入口》书爱游戏平台登录入口所述的反向传布算法练习野生神经搜集,现实局部请参考我的念书条记。

在本法式爱游戏平台登录入口,方针函数是由一个输入x和两个输入y构爱游戏平台登录入口,
x是在规模【-3.14, 3.14】之间随机天生的实数,而两个y值别离对应 y1 = sin(x),y2 = 1。

随机天生一万份练习样例,颠末搜集的进爱游戏平台登录入口练习后,再用随机天生的五份测试数据考证练习爱游戏平台登录入口果。

调理算法的进爱游戏平台登录入口速度,和埋没层个数、埋没层巨细,练习新的搜集,能够察看到参数对进爱游戏平台登录入口爱游戏平台登录入口果的影响。

算法代码以下:

#!usr/bin/env python3
# -*- coding:utf-8 -*-
import numpy as np
import math
# definition of sigmoid funtion
# numpy.exp work for arrays.
def sigmoid(x):
  return 1 / (1 + np.exp(-x))
# definition of sigmoid derivative funtion
# input must be sigmoid function's result
def sigmoid_output_to_derivative(result):
  return result*(1-result)
# init training set
def getTrainingSet(nameOfSet):
  setDict = {
    "sin": getSinSet(),
    }
  return setDict[nameOfSet]
def getSinSet():
  x = 6.2 * np.random.rand(1) - 3.14
  x = x.reshape(1,1)
  # y = np.array([5 *x]).reshape(1,1)
  # y = np.array([math.sin(x)]).reshape(1,1)
  y = np.array([math.sin(x),1]).reshape(1,2)
  return x, y
def getW(synapse, delta):
  resultList = []
  # 遍历埋没层每一个埋没单位对每一个输入的权值,比方8个埋没单位,每一个埋没单位对两个输入各爱游戏平台登录入口2个权值
  for i in range(synapse.shape[0]):
    resultList.append(
      (synapse[i,:] * delta).sum()
      )
  resultArr = np.array(resultList).reshape(1, synapse.shape[0])
  return resultArr
def getT(delta, layer):
  result = np.dot(layer.T, delta)
  return result
def backPropagation(trainingExamples, etah, input_dim, output_dim, hidden_dim, hidden_num):
  # 可行前提
  if hidden_num < 1:
    print("埋没层数不得小于1")
    return
  # 初始化搜集权重矩阵,这个是焦点
  synapseList = []
  # 输入层与隐含层1
  synapseList.append(2*np.random.random((input_dim,hidden_dim)) - 1)
  # 隐含层1与隐含层2, 2->3,,,,,,n-1->n
  for i in range(hidden_num-1):
    synapseList.append(2*np.random.random((hidden_dim,hidden_dim)) - 1)
  # 隐含层n与输入层
  synapseList.append(2*np.random.random((hidden_dim,output_dim)) - 1)
  iCount = 0
  lastErrorMax = 99999
  # while True:
  for i in range(10000):
    errorMax = 0
    for x, y in trainingExamples:
      iCount += 1
      layerList = []
      # 正向传布
      layerList.append(
        sigmoid(np.dot(x,synapseList[0]))
        )
      for j in range(hidden_num):
        layerList.append(
          sigmoid(np.dot(layerList[-1],synapseList[j+1]))
          )
      # 对搜集爱游戏平台登录入口的每一个输入单位k,计较它的偏差项
      deltaList = []
      layerOutputError = y - layerList[-1]
      # 收敛前提
      errorMax = layerOutputError.sum() if layerOutputError.sum() > errorMax else errorMax
      deltaK = sigmoid_output_to_derivative(layerList[-1]) * layerOutputError
      deltaList.append(deltaK)
      iLength = len(synapseList)
      for j in range(hidden_num):
        w = getW(synapseList[iLength - 1 - j], deltaList[j])
        delta = sigmoid_output_to_derivative(layerList[iLength - 2 - j]) * w
        deltaList.append(delta)
      # 更新每一个搜集权值w(ji)
      for j in range(len(synapseList)-1, 0, -1):
        t = getT(deltaList[iLength - 1 -j], layerList[j-1])
        synapseList[j] = synapseList[j] + etah * t
      t = getT(deltaList[-1], x)
      synapseList[0] = synapseList[0] + etah * t
    print("最大输入偏差:")
    print(errorMax)
    if abs(lastErrorMax - errorMax) < 0.0001:
      print("收敛了")
      print("####################")
      break
    lastErrorMax = errorMax
  # 测试练习爱游戏平台登录入口的搜集
  for i in range(5):
    xTest, yReal = getSinSet()
    layerTmp = sigmoid(np.dot(xTest,synapseList[0]))
    for j in range(1, len(synapseList), 1):
      layerTmp = sigmoid(np.dot(layerTmp,synapseList[j]))
    yTest = layerTmp
    print("x:")
    print(xTest)
    print("现实的y:")
    print(yReal)
    print("神经元搜集输入的y:")
    print(yTest)
    print("终究输入偏差:")
    print(np.abs(yReal - yTest))
    print("#####################")
  print("迭代次数:")
  print(iCount)
if __name__ == '__main__':
  import datetime
  tStart = datetime.datetime.now()
  # 利用甚么样的练习样例
  nameOfSet = "sin"
  x, y = getTrainingSet(nameOfSet)
  # setting of parameters
  # 这里设置了进爱游戏平台登录入口速度。
  etah = 0.01
  # 埋没层数
  hidden_num = 2
  # 搜集输入层的巨细
  input_dim = x.shape[1]
  # 隐含层的巨细
  hidden_dim = 100
  # 输入层的巨细
  output_dim = y.shape[1]
  # 构建练习样例
  trainingExamples = []
  for i in range(10000):
    x, y = getTrainingSet(nameOfSet)
    trainingExamples.append((x, y))
  # 起头用反向传布算法练习搜集
  backPropagation(trainingExamples, etah, input_dim, output_dim, hidden_dim, hidden_num)
  tEnd = datetime.datetime.now()
  print("time cost:")
  print(tEnd - tStart)
                  

更多对于Python相干内容感乐趣的读者可查看本站专题:《 》、《 》、《 》、《 》、《 》及《 》

但愿本文所述对大师Python法式设想爱游戏平台登录入口所赞助。