python實現感知機(學習AND操作)

前段時間看完了《人工智能》這本書,其中對神經網絡和遺傳算法比較感興趣,所以就試着回過頭去仔細認真的看,並總結歸納

今天用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)

實驗結果:
在這裏插入圖片描述
在這裏插入圖片描述
記錄總結一下這個過程,明天試着寫寫多層神經網絡(後向傳送訓練算法)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章