Понимание того, что именно нейронная сеть предсказывает в примере документации (MNIST) - PullRequest
0 голосов
/ 09 февраля 2020

Я прошел быстрый курс по нейронным сетям, чтобы лучше понять их, и теперь я пробую их для себя в R. Я следую этой документации Keras.

То, как я понимаю, что происходит:

Мы вводим серию изображений и преобразуем эти изображения в числовые матрицы на основе расположения пикселей и цветов в этих пикселях. Затем мы строим модель нейронной сети, чтобы узнать структуру этих схем в зависимости от классификации (от 0 до 9). Затем мы используем модель, чтобы предсказать, к какому классу принадлежит изображение. Я буду честен и признаю, что не совсем уверен, что такое y_train и x_train. Я просто вижу это как одну тренировку и один набор проверки, так что я не уверен, в чем разница между x и y.

Мой вопрос:

Я имею После выполнения шагов к T модель работает нормально, а прогнозы выглядят так, как в документации. В конечном счете, прогноз выглядит следующим образом: enter image description here

Я понимаю, что это означает, что наблюдение 1 в x_test предсказывается как категория 7.

Однако, глядя на x_test это выглядит так: enter image description here

В каждом столбце и строке есть 0, даже если я прокручиваю дальше вниз. Это где я запутался. Я также не уверен, как я смотрю на оригинальные изображения, чтобы убедиться, насколько хорошо они их предсказывают. В конце концов я хотел бы нарисовать число самостоятельно или около того, а затем посмотреть, сможет ли модель его предсказать, но для этого мне нужно сначала понять, что происходит. Я чувствую, что я рядом, но мне нужно немного подтолкнуть!

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

Я думаю, что если вы прочитаете больше о размерах входного и выходного слоев, это поможет.

В вашем примере: Входной слой: один обучающий пример изображения имеет два измерения 28 * 28, то есть преобразуется в один вектор измерения 784. Он действует как входной слой для нейронной сети. Так что для m обучающих примеров ваш входной слой будет иметь размеры (m, 784). Говоря аналогично (для традиционных систем ML), вы можете представить, что каждый пиксель изображения преобразуется в элемент (или x1, x2, ... x784), а ваш обучающий набор представляет собой фрейм данных с m строками и 784 столбцы, которые затем подаются в нейронную сеть для вычисления y_hat = f(x1,x2,x3,...x784).

Выходной слой: как выход для нашей нейронной сети, мы хотим, чтобы он предсказывал, от какого числа он 0 to 9. Таким образом, для отдельного обучающего примера выходной слой имеет размерность 10, представляющую каждое число от 0 до 9, а для n примеров тестирования выходным слоем будет матрица с размерностью n*10. Наш y - это вектор длиной n, который будет выглядеть как [1,7,8,2,.....], содержащий истинное значение для каждого примера тестирования. Но чтобы соответствовать размеру выходного слоя, векторное измерение y преобразуется с использованием быстрого кодирования. Представьте себе вектор длины 10, представляющий число 7, поместив 1 на 7-е место, а остальные позиции в нули примерно как [0,0,0,0,0,0,1,0,0,0].

Итак, в вашем вопросе, если вы хотите sh увидеть исходное изображение, вы должны увидеть его, прежде чем изменить примеры тренировок, например, image(mnist$test$x[1, , ]

Надеюсь, это поможет !!

0 голосов
/ 09 февраля 2020

y_train - метки, а x_train - данные тренировки, поэтому изображения в этом примере. Вам нужно использовать какую-то библиотеку для построения графиков. В этом примере от вас, вероятно, не требуется вводить собственные чертежи, и если вы хотите, вам необходимо предварительно обработать их так же, как в MNIST, и передать их в модель.

...