1

Согласно this tutorial (Pure Python with NumPy), я хочу создать простую (на простейшем уровне для обучения) нейронную сеть (Perceptron), которая может обучать распознаванию " Письмо. В этом учебном пособии, в предлагаемом примере, они создают сеть, которая может изучить логический оператор «И». В этом случае, у нас есть несколько входов (4 * 3 матрицы) и один выход (4 * 1 Матрица):Образцы учебных изображений в нейронную сеть с полным пакетом обучения

enter image description here

Каждый раз, когда мы вычитаем выходную матрицу с входной матрицей и вычислить ошибки и обновляя скорости и скоро.

Теперь я хочу дать изображение в качестве ввода, в данном случае, что будет моим выходом? Как определить, что изображение является буквой «А»? одно решение определяет «1» как букву «А» и «0» для «не-А», но если мой вывод является скаляром, как я могу вычесть его со скрытым слоем и рассчитать ошибки и обновить веса? В этом учебном пособии используется «полномасштабное» обучение и умножение всей матрицы ввода с весовой матрицей. Я хочу сделать этот метод. Конечным пунктом назначения является создание нейронной сети, которая может распознать букву «A» в простейшей форме. Я не знаю, как это сделать.

ответ

2

Fist off: Отлично, что вы пытаетесь понять нейронные сети, программируя их с нуля, вместо того, чтобы начинать с некоторой сложной библиотеки. Позвольте мне прояснить ситуацию: ваше понимание здесь:

Каждый раз, когда мы вычитаем выходную матрицу с матрицей ввода и вычисляем скорость ошибки и обновления и так далее.

не очень правильно. В вашем примере входная матрица X - это то, что вы представляете на входе вашей нейронной сети. Выход Y - это то, что вы хотите, чтобы сеть сделала для X: первый элемент Y[0] является желаемым выходом для первой строки X и так далее. Мы часто называем это «целевым вектором». Теперь, чтобы вычислить функцию потерь (т. Е. Ошибку), мы сравниваем вывод сети (L2 в связанном примере кода) с целевым вектором Y. На словах, мы сравниваем то, что мы хотим сеть, которую нужно сделать (Y) тому, что она действительно делает (L2). Затем мы делаем один шаг в направлении, которое ближе к Y.

Теперь, если вы хотите использовать изображение в качестве входа, вы должны думать о каждом пикселе изображения как о одной входной переменной. Ранее мы имели два входных переменных: А и В, для которых мы хотели вычислить термин X = A ∧ B.

Пример:

Если взять 8-на-8 пикселей, изображение, мы имеем 8 * 8 = 64 входных переменных. Таким образом, наша входная матрица X должна быть матрицей с 65 столбцами (64 пикселя изображения + 1 вход как период смещения, который постоянно = 1) и один ряд на один пример тренировки, который у вас есть. Например. если у вас есть один образ каждого из 26 букв, матрица будет содержать 26 строк.

Выходной вектор Y должен иметь такую ​​же длину, как X, то есть 26 в предыдущем примере. Каждый элемент в Y равен 1, если соответствующая строка ввода является A и 0, если это другая буква. В нашем примере Y[0] будет 1, Y[1:] будет 0.

Теперь вы можете использовать тот же код, что и раньше: вывод L2 будет вектором, содержащим предсказание сетей, которое затем можно сравнить с Y, как и раньше.

tl; dr Основная идея состоит в том, чтобы забыть, что изображение является 2D и сохраняет каждое входное изображение в виде вектора.

+1

Спасибо за отличный ответ. Последнее предложение спасло меня. «хранить каждое входное изображение как вектор». Я думал, что должен использовать изображение с исходной формой. прямо сейчас, если я преобразую его в вектор, я могу создать свою модель. еще раз спасибо. – Fcoder

Смежные вопросы