深度学习入门实践（一）

class Perceptron:
def __init__(self,input_num,activator):
self.activator = activator
self.weights = [0 for i in range(input_num)]
self.bias = 0

def __str__(self):
return '权重:%s\n偏置项:%f\n' % (self.weights,self.bias)

def predict(self,input_vec):
temp_list=[]
for i in range(len(input_vec)):
temp_list.append(input_vec[i]*self.weights[i])
return self.activator(sum(temp_list)+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
temp_list=[]
for i in range(len(self.weights)):
temp_list.append(self.weights[i]+rate*delta*input_vec[i])
self.weights=temp_list
self.bias=self.bias+rate*delta

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__':
and_perception=train_and_perceptron()
print(and_perception)
print('用训练好的感知器来预测结果：')
print('predict(1,1):%d'% and_perception.predict([1,1]))
print('predict(0,0):%d'% and_perception.predict([0,0]))
print('predict(1,0):%d'% and_perception.predict([1,0]))
print('predict(0,1):%d'% and_perception.predict([0,1]))