国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python實現的三層BP神經網絡算法示例

Python實現的三層BP神經網絡算法示例

2021-01-12 00:48羅兵 Python

這篇文章主要介紹了Python實現的三層BP神經網絡算法,結合完整實例形式分析了Python三層BP神經網絡算法的具體實現與使用相關操作技巧,需要的朋友可以參考下

本文實例講述了Python實現的三層BP神經網絡算法。分享給大家供大家參考,具體如下:

這是一個非常漂亮的三層反向傳播神經網絡的python實現,下一步我準備試著將其修改為多層BP神經網絡。

下面是運行演示函數的截圖,你會發現預測的結果很驚人!

Python實現的三層BP神經網絡算法示例

提示:運行演示函數的時候,可以嘗試改變隱藏層的節點數,看節點數增加了,預測的精度會否提升

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import math
import random
import string
random.seed(0)
# 生成區間[a, b)內的隨機數
def rand(a, b):
 return (b-a)*random.random() + a
# 生成大小 I*J 的矩陣,默認零矩陣 (當然,亦可用 NumPy 提速)
def makeMatrix(I, J, fill=0.0):
 m = []
 for i in range(I):
  m.append([fill]*J)
 return m
# 函數 sigmoid,這里采用 tanh,因為看起來要比標準的 1/(1+e^-x) 漂亮些
def sigmoid(x):
 return math.tanh(x)
# 函數 sigmoid 的派生函數, 為了得到輸出 (即:y)
def dsigmoid(y):
 return 1.0 - y**2
class NN:
 ''' 三層反向傳播神經網絡 '''
 def __init__(self, ni, nh, no):
  # 輸入層、隱藏層、輸出層的節點(數)
  self.ni = ni + 1 # 增加一個偏差節點
  self.nh = nh
  self.no = no
  # 激活神經網絡的所有節點(向量)
  self.ai = [1.0]*self.ni
  self.ah = [1.0]*self.nh
  self.ao = [1.0]*self.no
  # 建立權重(矩陣)
  self.wi = makeMatrix(self.ni, self.nh)
  self.wo = makeMatrix(self.nh, self.no)
  # 設為隨機值
  for i in range(self.ni):
   for j in range(self.nh):
    self.wi[i][j] = rand(-0.2, 0.2)
  for j in range(self.nh):
   for k in range(self.no):
    self.wo[j][k] = rand(-2.0, 2.0)
  # 最后建立動量因子(矩陣)
  self.ci = makeMatrix(self.ni, self.nh)
  self.co = makeMatrix(self.nh, self.no)
 def update(self, inputs):
  if len(inputs) != self.ni-1:
   raise ValueError('與輸入層節點數不符!')
  # 激活輸入層
  for i in range(self.ni-1):
   #self.ai[i] = sigmoid(inputs[i])
   self.ai[i] = inputs[i]
  # 激活隱藏層
  for j in range(self.nh):
   sum = 0.0
   for i in range(self.ni):
    sum = sum + self.ai[i] * self.wi[i][j]
   self.ah[j] = sigmoid(sum)
  # 激活輸出層
  for k in range(self.no):
   sum = 0.0
   for j in range(self.nh):
    sum = sum + self.ah[j] * self.wo[j][k]
   self.ao[k] = sigmoid(sum)
  return self.ao[:]
 def backPropagate(self, targets, N, M):
  ''' 反向傳播 '''
  if len(targets) != self.no:
   raise ValueError('與輸出層節點數不符!')
  # 計算輸出層的誤差
  output_deltas = [0.0] * self.no
  for k in range(self.no):
   error = targets[k]-self.ao[k]
   output_deltas[k] = dsigmoid(self.ao[k]) * error
  # 計算隱藏層的誤差
  hidden_deltas = [0.0] * self.nh
  for j in range(self.nh):
   error = 0.0
   for k in range(self.no):
    error = error + output_deltas[k]*self.wo[j][k]
   hidden_deltas[j] = dsigmoid(self.ah[j]) * error
  # 更新輸出層權重
  for j in range(self.nh):
   for k in range(self.no):
    change = output_deltas[k]*self.ah[j]
    self.wo[j][k] = self.wo[j][k] + N*change + M*self.co[j][k]
    self.co[j][k] = change
    #print(N*change, M*self.co[j][k])
  # 更新輸入層權重
  for i in range(self.ni):
   for j in range(self.nh):
    change = hidden_deltas[j]*self.ai[i]
    self.wi[i][j] = self.wi[i][j] + N*change + M*self.ci[i][j]
    self.ci[i][j] = change
  # 計算誤差
  error = 0.0
  for k in range(len(targets)):
   error = error + 0.5*(targets[k]-self.ao[k])**2
  return error
 def test(self, patterns):
  for p in patterns:
   print(p[0], '->', self.update(p[0]))
 def weights(self):
  print('輸入層權重:')
  for i in range(self.ni):
   print(self.wi[i])
  print()
  print('輸出層權重:')
  for j in range(self.nh):
   print(self.wo[j])
 def train(self, patterns, iterations=1000, N=0.5, M=0.1):
  # N: 學習速率(learning rate)
  # M: 動量因子(momentum factor)
  for i in range(iterations):
   error = 0.0
   for p in patterns:
    inputs = p[0]
    targets = p[1]
    self.update(inputs)
    error = error + self.backPropagate(targets, N, M)
   if i % 100 == 0:
    print('誤差 %-.5f' % error)
def demo():
 # 一個演示:教神經網絡學習邏輯異或(XOR)------------可以換成你自己的數據試試
 pat = [
  [[0,0], [0]],
  [[0,1], [1]],
  [[1,0], [1]],
  [[1,1], [0]]
 ]
 # 創建一個神經網絡:輸入層有兩個節點、隱藏層有兩個節點、輸出層有一個節點
 n = NN(2, 2, 1)
 # 用一些模式訓練它
 n.train(pat)
 # 測試訓練的成果(不要吃驚哦)
 n.test(pat)
 # 看看訓練好的權重(當然可以考慮把訓練好的權重持久化)
 #n.weights()
if __name__ == '__main__':
 demo()

希望本文所述對大家Python程序設計有所幫助。

原文鏈接:http://www.cnblogs.com/hhh5460/p/4304628.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 99精品视频免费 | 青草福利| 国产一区亚洲二区三区 | 国产精品黄色 | 亚洲精品国产第一综合99久久 | 久久综合久久久 | 欧美成年人网站 | 欧美日韩第一页 | 中文字幕一区二区三区四区五区 | 91久久久久久久久 | 精品午夜久久 | 亚洲国产成人精品女 | 欧美国产一区二区三区 | 精品久| 色网在线看 | 国产一级特黄 | 黄色小网站在线观看 | 国产精品美女久久久 | 中文字幕在线观看 | 在线播放亚洲 | 欧美日一区 | 黑人精品 | 国产一区二区三区在线 | 中文字幕免费中文 | 中文免费字幕 | 日韩成人在线免费视频 | 福利在线观看视频 | 亚洲视频黄 | 欧美日韩免费在线 | 日韩精品一区二区在线视频 | 国产二区视频 | 搞黄网站 | 亚洲伊人久久综合 | 日韩在线观看中文字幕 | 久久a毛片 | 四季久久免费一区二区三区四区 | 国产韩国精品一区二区三区 | 日本一本视频 | 国产精品a久久久久 | 国产9色在线 | 日韩 | 色婷婷狠狠 |