我的第一個感知機!!!(哭了

import numpy as np
import io

class Perceptron(object):
    # 輸入節點初始化權重和偏置常數b(假設與偏置常數相乘的輸入值一直爲0)
    def __init__(self, inode_num, learning_rate):
     #   self.inode_vec = inode_vec                     # 初始化輸入節點個數
        self.weight = np.zeros(inode_num)         # 初始化權重
        self.learning_rate = learning_rate
        self.bias = 0.0
        
    #定義激活函數
    def activator(self, Sum):                 # 返回0/1
        if Sum > 0:
            outcome = 1
        else:
            outcome = 0
        return outcome
    
    #權重更新
    def train(self, inode_vec, label):
        ixw = np.hstack((inode_vec * self.weight, np.array([self.bias])))          # 計算輸入與權重乘積後與偏置常數合併爲一個向量
        ixw_sum = ixw.sum()                   # 返回計算後的元素總和
        output = self.activator(ixw_sum)           # 總和輸入激活函數
        delta = label - output                     # 計算誤差
        delta_weight = self.learning_rate * delta * inode_vec         # 計算權重誤差
        delta_bias = self.learning_rate * delta          # 計算偏置常數誤差
        self.weight += delta_weight           # 權重更新
        self.bias += delta_bias           #偏置常數更新
    
    def printout(self):
        print('weight:', self.weight, 'bias:', self.bias,) 
samples = io.open(r'C:\Users\john\PerceptronTest.csv','r')    # 打開訓練樣本
list_samples = samples.readlines()
samples.close()
inode_num = 2
learning_rate = 0.1
n = Perceptron(inode_num, learning_rate)
iterate_num = 5               #設置迭代次數

for i in range(0,iterate_num):
    for item in list_samples:   
        inode_vec = np.asfarray( item[:-1].split(',') )      
        label = inode_vec[2]
        inode_vec = inode_vec[:2]
        n.train(inode_vec, label)
        n.printout()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章