我正在尝试将数字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)