深度学习1--感知器

# -*- coding: utf-8 -*-
"""
Created on Thu Apr 12 18:01:30 2018

@author: SS
"""

'''
and 感知器的实现 
用到的函数 包括:
初始化: __init__
打印:__str__
预测:predict (输入向量 生成结果)
训练:train
每一次的训练:_one_iteration
更新权重:_update_weight
'''
import numpy as np 

class And_Perceptron(object):
    def __init__(self,input_num,activator):
        self.input_num=input_num
        self.weight=np.zeros(self.input_num)
        self.activator=activator
        self.bias=0
    def __str__(self):
         return 'weights\t:%s\nbias\t:%f\n' % (self.weight, self.bias)
    def predict(self,input_vec):
        input_vec_np=np.array(input_vec) 
        # 把input_vec[x1,x2,x3...]和weights[w1,w2,w3,...] =[x1*w1,x2*w2...]
        vec_weight=np.multiply(input_vec_np,self.weight)
        sum_vec_weight=np.sum(vec_weight)  #sum=x1*w1+x2*w2+...
        output=self.activator(sum_vec_weight+self.bias)
        return output
    
    def _update_weight(self,input_vec,label,output,rate):
        #更新权重
        input_vec_np=np.array(input_vec)
        delta=label-output
        self.weight+=delta*rate*input_vec_np
        self.bias+=rate*delta
    
    def _one_iteration(self,input_vecs,labels,rate):
        samples=zip(input_vecs,labels)
        #[[0,0],[0,1],[1,0],[1,1]]  [0,0,0,1]
        for (input_vec,label) in samples:
            output=self.predict(input_vec)
            self._update_weight(input_vec,label,output,rate)
            
    def train(self,input_vecs,labels,iterations,rate):
        for i in range(iterations):
            self._one_iteration(input_vecs,labels,rate)
    
def f(x):
    if x>0:
        return 1
    else:
        return 0

def get_train_dataset():
    input_vecs=[[1,1],[0,0],[0,1],[1,0]]
    labels=[1,0,0,0]
    return input_vecs,labels

def train_and_perceptron():
    p=And_Perceptron(2,f)
    input_vecs, labels = get_train_dataset()
    p.train(input_vecs, labels, 10, 0.1)
    #返回训练好的感知器
    return p

if __name__ == '__main__': 
    # 训练and感知器
    and_perception = train_and_perceptron()
    # 打印训练获得的权重
    print and_perception
    # 测试
    print '1 and 1 = %d' % and_perception.predict([1, 1])
    print '0 and 0 = %d' % and_perception.predict([0, 0])
    print '1 and 0 = %d' % and_perception.predict([1, 0])
    print '0 and 1 = %d' % and_perception.predict([0, 1])
  
            
    
        
        
        
        

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值