Я создаю нейронную сеть для обнаружения рукописных цифр. На данный момент я только обучаю его примерно 200 цифрам, которые я вылез из Интернета и обработал, чтобы они были черными или белыми (1 или 0).
Когда я тренирую свою нейронную сеть с 10 из этих изображений и тестирую на всех 200, я получаю точность 61,5%, но если я тестирую на всех 200, я получаю точность 10%, потому что она угадывает 3 для всего. Почему это происходит. Я пытался изменить размер слоев, но это не помогает. Я думаю, что есть ошибка с логикой моей нейронной сети
def sigmoid(z):
return 1/(1+np.exp(-z))
def sigmoidd(z):
return z*(1-z)
def train(x, y, iterations = 1000):
synoptic_weights1 = 2*np.random.random((400,12)) -1
synoptic_weights2 = 2*np.random.random((12,12)) - 1
synoptic_weights3 = 2*np.random.random((12,10)) - 1
#print(synoptic_weights)
for i in range(1000):
hidden_layer_1 = sigmoid(np.dot(x, synoptic_weights1))
hidden_layer_2 = sigmoid(np.dot(hidden_layer_1, synoptic_weights2))
outputs = sigmoid(np.dot(hidden_layer_2, synoptic_weights3))
#print(outputs)
#print(answers)
output_error = y-outputs
output_delta = output_error*sigmoidd(outputs)
hidden_error2 = output_delta.dot(synoptic_weights3.T)
hidden_delta2 = hidden_error2 * sigmoidd(hidden_layer_2)
hidden_error1 = hidden_delta2.dot(synoptic_weights2.T)
hidden_delta1 = hidden_error1 * sigmoidd(hidden_layer_1)
synoptic_weights3 += hidden_layer_2.T.dot(output_delta)
synoptic_weights2 += hidden_layer_1.T.dot(hidden_delta2)
synoptic_weights1 += x.T.dot(hidden_delta1)
return synoptic_weights1, synoptic_weights2, synoptic_weights3
Я ожидаю, что при тестировании получится приличная точность для всех 200 изображений, а не 10%