两层神经网络(无隐藏层)的python实现

import numpy as np

class ANN(object):

    def __init__(self,alpha=0.131,numClasses=10,lamb=0.00011):
        self.theta=None
        self.bias=None
        self.alpha=alpha
        self.classes=numClasses
        self.lamb=lamb

    def train(self,data,label):
        ''' data:array-like[1xm],like:[1,1,1,1] label:integer '''
        if self.theta is None:
            shape=np.shape(data)
            self.theta=np.random.uniform(0,0.04,[shape[0],self.classes])
            self.bias=np.random.uniform(0,1,self.classes)

        hx=self.sigmoid(self.theta, data)
        #not label 0.0001-->0
        #is label 0.9999-->1
        y=np.ones(self.classes)*0.00001
        y[label]=0.99999# if is the label
        delta=hx*(1-hx)*(y-hx)
        self.theta+=self.alpha*np.outer(data,delta)-self.lamb*self.theta
        self.bias+=self.alpha*delta

        #return np.dot(self.theta,delta)


    def classify(self,data):
        ''' data:array-like[1xm],like:[1,1,1,1] '''
        result=self.sigmoid(self.theta,data,self.bias)
        return np.argmax(result)

    def sigmoid(self,w,x,b=0):
        ''' w,x: array-like '''
        w=np.array(w)
        x=np.array(x)
        return 1 /( 1+ np.exp(-1*(np.dot(w.T,x)+b)))


if __name__=="__main__":
    nn=ANN()
    yourData=...
    yourLabel=...
    yourDataSize=...
    yourTestData=...
    for i in xrange(yourDataSize):
        nn.train(yourData,yourLabel)
    nn.classify(yourTestData)

你可能感兴趣的:(numpy,pythonl,两层神经网络)