面试例题5—感知器实现and函数

来源:互联网 发布:js 百度地图 标注位置 编辑:程序博客网 时间:2024/05/18 22:18

用感知器实现and函数

参考博客:https://www.zybuluo.com/hanbingtao/note/433855点击打开链接

and 运算时一个二元运算,它的真值表如下:

x1x2y000010100111

Python:

class Perceptron(object):    def __init__(self, input_num, activator):        self.activator = activator        self.weights = [0 for i in range(input_num)]        self.bias = 0.0    def __str__(self):        return 'weights\t:%s\nbias\t:%f\n' % (self.weights,self.bias)    def train(self, input_vecs, labels, iteration, rate): #train        for i in range(iteration):            self._one_iteration(input_vecs, labels, rate)    def _one_iteration(self, input_vecs, labels, rate): # one iteration        samples = zip(input_vecs, labels)        for (input_vec, label) in samples:            output = self.predict(input_vec)            self._update_weights(input_vec, label, output, rate)    def predict(self, input_vec):  #predict output        return self.activator(            reduce(lambda a, b: a + b,                   map(lambda (x,w): x * w,                   zip(input_vec,self.weights))                   ,0.0) + self.bias)    def _update_weights(self, input_vec, label, output, rate): # update weights and bias        delta = label - output        self.weights = map(            lambda (x,w): w + rate * x * delta            ,zip(input_vec, self.weights)        )        self.bias += rate * deltadef f(x):     # actavition function    return 1 if x > 0 else 0def get_trianing_data():  #train data    input_vects = [[1,1],[1,0],[0,1],[0,0]]    labels = [1,0,0,0]    return input_vects,labelsdef train_and_perceptron(): # train    p = Perceptron(2,f)    input_vecs, labels = get_trianing_data()    p.train(input_vecs, labels, 10, 0.1)    return pif __name__ == "__main__":    and_perceptron = train_and_perceptron()    print and_perceptron    print '1 and 1 = %d' % and_perceptron.predict([1, 1])    print '0 and 0 = %d' % and_perceptron.predict([0, 0])    print '1 and 0 = %d' % and_perceptron.predict([1, 0])    print '0 and 1 = %d' % and_perceptron.predict([0, 1])



原创粉丝点击