Алгоритм машинного обучения устанавливает все выходы в нули - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь создать свой первый алгоритм машинного обучения, однако он не работает. На данный момент я пытаюсь сделать И-ворота. Когда я тренирую свою нейронную сеть, все выходы становятся нулями. Вот мой код (функции feed_forward и spreadate_backwards находятся в классе с именем neural_network):

def feed_forward(self, mInput):
    mInput = np.reshape(mInput, self.layer[0][0].shape)
    self.layer[0][0] = np.asmatrix(mInput)
    self.layer[1][0] = np.asmatrix(mInput)
    for i in range (1, len(self.layer[0])):
        self.layer[0][i] = self.weight[i-1] * self.layer[1][i-1] + self.bias[i-1]
        self.layer[1][i] = self.sigmoid(self.layer[0][i])
    return self.layer


def propagate_backwards(self, inputs, desired_outputs, learning_rate):
    #set deltaWeights and deltaBiases to zero
    for i in range (0, len(self.deltaWeight)):
        self.deltaWeight[i] -= self.deltaWeight[i]
        self.deltaBias[i] -= self.deltaBias[i]

    for i in range (0, len(inputs)):
        self.layer = self.feed_forward(inputs[i])
        self.deltaLayer[-1] = np.multiply((self.layer[1][-1] - np.asmatrix(desired_outputs[i])), self.derivativeSigmoid(self.layer[0][-1]))
        for j in range (len(self.layer[0])-2, -1, -1):
            self.deltaLayer[j] = np.multiply((self.weight[j].transpose() * self.deltaLayer[j+1]), self.derivativeSigmoid(self.layer[0][j]))
            self.deltaWeight[j] += (self.deltaLayer[j+1] * self.layer[1][j].transpose()) / len(inputs)
            self.deltaBias[j] += self.deltaLayer[j+1] / len(inputs)
    for i in range (0, len(self.weight)):
        self.weight[i] -= self.deltaWeight[i] * learning_rate
        self.bias[i] -= self.deltaBias[i] * learning_rate





training_data = [[], [], [], []]
desired_output = [[], [], [], []]

training_data[0] = [1, 1]
training_data[1] = [1, 0]
training_data[2] = [0, 1]
training_data[3] = [0, 0]

desired_output[0] = [1]
desired_output[1] = [0]
desired_output[2] = [0]
desired_output[3] = [0]

#create neural network with 2 neurons in the first layer, 2 neurons in the second layer and 1 layer in the third layer
nn = neural_network([2, 2, 1], '/Users/anton/Documents/machine_learning/MNIST/neural_network3.txt') 

for i in range (0, 4): #print outputs and desired_outputs before training
    print(str(nn.feed_forward(training_data[i])[1][-1]) + " " + str(desired_output[i]))
print("")

for i in range(0, 20): #train 20 times
    nn.propagate_backwards(training_data, desired_output, 1)
    for i in range (0, 4):
        print(str(nn.feed_forward(training_data[i])[1][-1]) + " " + str(desired_output[i])) #print outputs and desired_outputs during training
    print("")

Что не так в моем коде? Надеюсь, мой код понятен ... Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...