感知器

作者: VaultHunter | 来源:发表于2017-08-16 09:11 被阅读0次

    感知器
    真的好像自控中的负反馈
    程序不要随便删除

    from functools import reduce  
    #python 3 在Python 3里,reduce()函数已经被        
    #从全局名字空间里移除了,它现在被放置在
    #fucntools模块里 用的话要 先引入:                  
    class Perceptron(object):
        def __init__(self, input_num, activator):               #初始化函数
            self.activator = activator
            self.weights = [0.0 for _ in range(input_num)]
            self.bias = 0.0
    
        def __str__(self):
            return 'weights\t:%s\nbias\t:%f\n' % (self.weights, self.bias)
    
        def predict(self,input_vec):               #这一步与连接中程序有所不同
            L=[i*j for i,j  in zip(input_vec,self.weights)]
            return self.activator(reduce
                          (lambda a, b: a + b, L, 0.0) + self.bias)
         
    
        def train(self, input_vecs, labels, iteration, rate):
            for i in range(iteration):
                self._one_iteration(input_vecs, labels, rate)
    
    
    
        def _one_iteration(self, input_vecs, labels, rate):
            samples = zip(input_vecs, labels)       
            for (input_vec,label) in samples:
                output = self.predict(input_vec)
                self._update_weights(input_vec, output, label, rate)   
    
        def _update_weights(self, input_vec, output, label, rate):
            delta = label - output
            self.weights =[j + rate * delta * i for i,j in  zip(input_vec,self.weights)]  
            self.bias += rate * delta
        #这里同样也有map 和 zip 的问题
    
    
    def f(x):
        return 1 if x>0 else 0
    
    
    def get_training_dataset():
        input_vecs = [[1,1], [0,0], [1,0], [0,1]]
        labels = [1, 0, 0, 0]
        return input_vecs, labels 
    
    
    def train_and_perceptron():
        p = Perceptron(2, f)
        input_vecs, labels = get_training_dataset()
        p.train(input_vecs, labels, 10, 0.1)
        return p
    
    
    
    if __name__ == '__main__':
        example = train_and_perceptron()
        print (example)
        print ('1 and 1 = %d' % example.predict([1, 1]))
        print ('1 and 0 = %d' % example.predict([1, 0]))
        print ('0 and 0 = %d' % example.predict([0, 0]))
        print ('0 and 1 = %d' % example.predict([0, 1]))
    
    

    在连接中 return self.activator(reduce(lambda a, b: a + b, map(lambda (x, w): x * w,
    zip(input_vec, self.weights)), 0.0) + self.bias)
    这里就是y = f(w * x +b) 但是在python3中,zip 和 map返回的是对象 而非列表,支持迭代

    相关文章

      网友评论

          本文标题:感知器

          本文链接:https://www.haomeiwen.com/subject/bkivrxtx.html