深度神经网络算法,是基于神经网络算法的一种拓展,其层数更深,达到多层,本文以简单神经网络为例,利用梯度下降算法进行反向更新来训练神经网络权重和偏向参数,文章最后,基于Python 库实现了一个简单神经网络算法程序,并对异或运算和0-9字符集进行预测。

一、问题引入

  利用如下图像结构,通过训练集对其参数进行训练,当有新的测试数据时,通过更新函数,获得正确的预测值,更新函数方程为:

    Oij = activation(sum(xi*wij)+bij)

day-11 python自带库实现2层简单神经网络算法
  图中为简单的两层神经网络结构4,5对应的为隐藏层,6为输出层, activation代表激活函数,常用的有logistictanh函数,b称为偏向。

二、神经网络正向更新和反向更新规则介绍

  对于正向更新:

    Oij = activation(sum(xi*wij)+bij)

  对于反向更新:

    对于输出层:Errj = activation_derivate(Oj)*(Tj-Oj)

    对于隐藏层:Errj = activation_derivate(Oj)*sum(Errk*Wjk)

    delta(Wij) = l*Errj*Oij

    delta(bj) = l*Errj

    wij = wij + delta(wij)

    bj = bj + delta(bj)

  其中:

    j代表第j

    k代表输出

    T代表实际标记值

    O代表输出值

    activation代表激活函数,常用的有logistictanh函数

    activation_derivate代表激活函数的倒数

、一个简单神经网络的数学运算实例

  我们以一个3×2×1神经网络为例,说明如何利用正向更新和反向更新来训练神经网络,完成一次更新:

day-11 python自带库实现2层简单神经网络算法


x1

x2

x3

w14

w15

w24

w25

w34

w35

w46

w56

b4

b5

b6

1

0

1

0.2

-0.3

0.4

0.1

-0.5

0.2

-0.3

-0.2

-0.4

-0.2

0.1


  同时,我们设定学习率l=0.9,实际输出值为1

 

import numpy as np
x1 = 1
x2 = 0
x3 = 1
w14 = 0.2
w15 = -0.3
w24 = 0.4
w25 = 0.1
w34 = -0.5
w35 = 0.2
w46 = -0.3
w56 = -0.2
b4 = -0.4
b5 = 0.2
b6 = 0.1
l = 0.9
t = 1
 
# 定义activation函数和倒数
def logistic(x):
    return 1/(1+np.exp(-x))
 
def logistic_derivate(x):
    return x*(1-x)
 
# 正向更新
z4 = x1*w14 + x2*w24 + x3*w34 + b4
z5 = x1*w15 + x2*w25 + x3*w35 + b5
O4 = logistic(z4)
O5 = logistic(z5)
z6 = O4*w46 + O5 * w56 + b6
O6 = logistic(z6)
print(O4,O5,O6)
结果:0.331812227832 0.524979187479 0.473888898824
# 求取各个神经元节点误差值 E6 = logistic_derivate(O6)*(t-O6) E5 = logistic_derivate(O5)*E6*w56 E4 = logistic_derivate(O4)*E6*w46 print(E6,E5,E4) 结果:0.131169078214 -0.00654208506417 -0.00872456196543
# 反向更新权重和偏向 w46 = w46 + l*E6*O4 w56 = w56 + l*E6*O5 w14 = w14 + l*E4*x1 w24 = w14 + l*E4*x2 w34 = w34 + l*E4*x3 w15 = w15 + l*E5*x1 w25 = w25 + l*E5*x2 w35 = w35 + l*E5*x3 print(w46,w56,w14,w15,w24,w25,w34,w35) 结果:-0.260828846342 -0.138025067507 0.192147894231 -0.305887876558 0.192147894231 0.1 -0.507852105769 0.194112123442
b4
= b4 + l*E4 b5 = b5 + l*E5 b6 = b6 + l*E6 print(b4,b5,b6)
结果:-0.407852105769 0.194112123442 0.21805217039

 

 

 

、简单神经网络算python实现程序

  介绍程序前,首先引入一个矩阵点乘基本运算

import numpy as np


# 一维矩阵

a = np.arange(0,9)

print(a)

b = a[::-1]

print(b)

print(np.dot(a,b))


# 二维矩阵

a = np.arange(1,5).reshape(2,2)

print(a)

b = np.arange(5,9).reshape(2,2)

print(b)

c = np.dot(a,b)

print(c)


结果:

[0 1 2 3 4 5 6 7 8]

[8 7 6 5 4 3 2 1 0]

84

[[1 2]

[3 4]]

[[5 6]

[7 8]]

[[19 22]

[43 50]]
View Code

相关文章:

  • 2021-10-02
  • 2022-12-23
  • 2022-12-23
  • 2022-02-07
  • 2021-08-27
  • 2022-03-09
  • 2021-04-24
  • 2021-09-09
猜你喜欢
  • 2021-05-15
  • 2021-11-04
  • 2021-12-29
  • 2021-11-30
  • 2021-12-23
  • 2022-12-23
  • 2022-03-11
相关资源
相似解决方案