前段時間看完了《人工智能》這本書,其中對神經網絡和遺傳算法比較感興趣,所以就試着回過頭去仔細認真的看,並總結歸納
今天用python,按照書上介紹的感知機的步驟敲了代碼,初步實現了,但是由於太久沒敲代碼加上剛接觸python,代碼難看的不行,大神勿噴哈哈哈,下面是代碼
def stepFunc(x): #定義階躍函數
if x > 0:
return 1
else:
return 0
def trainning():
#初始化權重、閾值和學習速度
weight = [0.5,0.5]
threshold = 0.2
learning_rate = 0.1
#設置訓練數據
trainning_X = [[0,0],[0,1],[1,0],[1,1]]
trainning_Y = [0,0,0,1]
#誤差總和變量
bias = 1
y = 0 #記錄實際輸出
p = 1 #記錄迭代次數
while bias != 0:
print("第",p,"次迭代")
bias = 0
e = 0
i = 0
for x in trainning_X:
X = x[0] * weight[0] + x[1] * weight[1] - threshold
y = stepFunc(X)
#誤差e = 期望輸出 - 實際輸出
e = trainning_Y[i] - y
if e != 0:
# 調整權重
weight[0] += learning_rate * x[0] * e
weight[1] += learning_rate * x[1] * e
bias += abs(e)
i += 1
print("x:", x, " y:", y, " 誤差:", e," 修改後權重:w1:",weight[0]," w2:",weight[1])
print("此次迭代誤差總和爲",bias)
p += 1
print("訓練結束")
return weight,threshold
def predict(test_X):
print("測試數據:",test_X)
print("預測如下:")
for x in test_X:
X = x[0] * weight[0] + x[1] * weight[1] - threshold
y = stepFunc(X)
print("x:", x, " y:", y)
weight,threshold = trainning()
test_X = [[1,0],[0,1],[1,1],[0,0]] #測試數據
predict(test_X)
實驗結果:
記錄總結一下這個過程,明天試着寫寫多層神經網絡(後向傳送訓練算法)