具有2层的神经网络

时间:2020-05-10 17:24:59

标签: python python-3.x neural-network

我正在尝试将数字0-3分类为“ 0”,将4-7数字分类为“ 1”。我分别使用了2层,分别包含4和1个神经元。除非它们不是训练数据集的一部分,否则它不会为数字0-3提供正确的输出。对错误是什么或可以更改的内容的任何帮助将大有帮助。谢谢。

from numpy import dot, exp, random, array, append

class NeuralNet():
    def __init__(self):
        self.wt1=random.rand(3,3) #3x4
        self.wt2=random.rand(3,1) #4x1
        self.w1=append(self.wt1,[[-1,-1,-1]],axis=0).T
        self.w2=append(self.wt2,[[-1]],axis=0)

    def sigmoid(self,x):
        return 1/(1+exp(-x))

    def sigmoid_derivative(self,x):
        return self.sigmoid(x)*(1-self.sigmoid(x))

    def forward(self,inputs):

        self.layer1=self.sigmoid(dot(inputs,self.w1))
        self.layer2=self.sigmoid(dot(self.layer1,self.w2))

        return self.layer1, self.layer2


    def train(self, train_input, train_output, itrs):

        for i in range(itrs):

            output1,output2=self.forward(train_input)

            error=train_output-output2

            d_weights1 = dot(train_input.T,  (dot(2*error * self.sigmoid_derivative(output2), self.w2.T) * self.sigmoid_derivative(output1)))
            d_weights2 = dot(output1.T, (2*error * self.sigmoid_derivative(output2)))

            self.w1+=d_weights1*0.1
            self.w2+=d_weights2*0.1

if __name__=='__main__':
    nn=NeuralNet()

    print('Random weights at the start of training') 
    print("First: ",nn.w1)
    print("Second:",nn.w2)

    train_inputs = array([[0, 0, 0], [1, 1, 1], [1, 1, 0], [0, 1, 0]]) 
    train_outputs = array([[0, 1, 1, 0]]).T 

    nn.train(train_inputs, train_outputs, 100000)

    print('New weights after training') 
    print("First:",nn.w1) 
    print("Second:",nn.w2)

    print ("New example") 
    ans1,ans2=nn.forward(array([0, 0, 1]))
    print(ans2) 

0 个答案:

没有答案