Некорректно работает нейронная сеть

Читаю книгу "Создаем нейронную сеть" от Тарика Рашида, повторяю код за автором и у меня нейросеть выдает совсем не те результаты, что получаются у автора. Также тестировал код автора, взятый с гитхаба, тоже работает некорректно. В чем может быть проблема? Свой код и ссылку на код автора прикладываю ниже

import numpy as np
import scipy.special
import matplotlib.pyplot as plt

class neuralNetwork:
    def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
        self.inodes = inputnodes # кол-во узлов в входном слое
        self.hnodes = hiddennodes # кол-во узлов в скрытом слое
        self.onodes = outputnodes # кол-во узлов в выходном слое
        self.lr = learningrate
        self.wih = np.random.normal(0.0, self.inodes ** -0.5, (self.hnodes, self.inodes)) # матрица весовых коэффициентов связей (между входным и скрытым слоями)
        self.who = np.random.normal(0.0, self.hnodes ** -0.5, (self.onodes, self.hnodes)) # матрица весовых коэффициентов между скрытым и выходным слоями
        self.activation_func = lambda x: scipy.special.expit(x)
        
    def train(self, inputs_list, targets_list):
        inputs = np.array(inputs_list, ndmin=2).T
        targets = np.array(targets_list, ndmin=2).T
        
        hidden_inputs = np.dot(self.wih, inputs)
        hidden_outputs = self.activation_func(hidden_inputs)
        
        final_inputs = np.dot(self.who, hidden_outputs)
        final_outputs = self.activation_func(final_inputs)
        
        outputs_errors = targets - final_outputs
        hidden_errors = np.dot(self.who.T, outputs_errors)
        self.who += self.lr * np.dot(outputs_errors * final_outputs * (1 - final_outputs), hidden_outputs.T)
        self.wih += self.lr * np.dot(hidden_errors * hidden_outputs * (1 - hidden_outputs), inputs.T)
        
        
    
    def query(self, inputs_list):
        inputs = np.array(inputs_list, ndmin=2).T
        hidden_inputs = np.dot(self.wih, inputs)
        hidden_outputs = self.activation_func(hidden_inputs)
        
        final_inputs = np.dot(self.who, hidden_outputs)
        final_outputs = self.activation_func(final_inputs)
        return final_outputs
        

input_nodes = 784
hidden_nodes = 100
output_nodes = 10

some_neural = neuralNetwork(input_nodes, hidden_nodes, output_nodes, 0.3)

with open('mnist_test_10.csv', 'r') as data_file:
    test_data = data_file.read().split('\n')[:-1]
    
scorecard = []

for record in test_data:
    values = record.split(',')
    correct_answer = int(values[0])
    print(correct_answer, 'истинный ответ')
    
    inputs = (np.asfarray(values[1:]) / 255.0 * 0.99) + 0.01
    outputs = some_neural.query(inputs)
    
    max_label = np.argmax(outputs)
    print(max_label, 'ответ сети')
    
    if max_label == correct_answer:
        scorecard.append(1)
    else:
        scorecard.append(0)
    
#fig, axis = plt.subplots(figsize=(6, 6))
#axis.imshow(np.asfarray(values[1:]).reshape((28, 28)), cmap='Greys')

код автора: https://github.com/makeyourownneuralnetwork/makeyourownneuralnetwork/blob/master/part2_neural_network_mnist_data.ipynb


Ответы (0 шт):