TL; DR: Вы строите полностью подключенную сеть, а не CNN, ваш вход должен быть 1D-тензором формы 28*28 = 784
, а ваш выходной тензор должен быть 1D-формой 10
.
В соответствии с описанием проблемы вы пытаетесь построить нейронную net для классификации MNIST
цифр. Правильно? Таким образом, ваша сеть должна отобразить входные данные формы 28x28
на выходной вектор формы 10
(прогнозируемые вероятности для каждого класса di git: 0,1, ... 9), а затем применить argmax
к получить прогнозируемые значения.
Теперь посмотрите на вашу output
форму:
# output array from the above issue:
output = np.array([7, 2, 2, 7, 7, 2, 2, 7, 1, 2, 7, 7, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 2, 2, 7, 2, 2, 2])
print(output.shape)
Вывод:
(28,)
28
против 10
. И даже больше до применения argmax
выходная форма была 28x28
. Таким образом, это определенно не то, чего мы хотим достичь.
Проблема в шаге вперед. Вы создаете полностью связанные классы c слоев, но вы не изменяете свой входной тензор 2D от 28x28
до 1D тензора формы 784
. Если вы хотите работать с 2D-входами, вы должны использовать архитектуру CNN.
Таким образом, чтобы решить вашу проблему, вы должны исправить все формы ввода, а также смещения, веса.