Подтвердить что ты не робот

Нейронные сети - входные значения

У меня есть вопрос, который может быть тривиальным, но он не описан нигде, где я смотрел. Я изучаю нейронные сети, и везде я смотрю там какую-то теорию и некоторый тривиальный пример с некоторыми 0 и 1 в качестве входных данных. Мне интересно: нужно ли мне вводить только одно значение в качестве входного значения для одного нейрона, или это может быть вектор трех значений (например, цвет RGB)?

4b9b3361

Ответ 1

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

С практической точки зрения это связано с тем, что (как показало одно из ранних решений) у вас может быть только нейрон для каждого числа в векторе, а затем все они являются входом в один нейрон. Это должно дать вам желаемое поведение после тренировки, так как нейрон второго слоя может эффективно использовать весь вектор.

С математической точки зрения существует фундаментальная теорема теории кодирования, которая утверждает, что любой вектор чисел может быть представлен как одно число. Таким образом, если вы действительно не хотите дополнительный слой нейронов, вы можете просто кодировать значения RGB в один номер и вводить их в нейрон. Хотя эта функция кодирования, вероятно, затруднит большинство проблем с обучением, поэтому я сомневаюсь, что это решение будет стоить в большинстве случаев.

Подводя итог: искусственные нейронные сети используются без передачи вектора в единицу ввода, но из-за этого не теряют вычислительной мощности.

Ответ 2

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

В вашем случае:

R[0..1] => (N1)----\
                    \
G[0..1] => (N2)-----(N4) => Result[0..1]
                    /
B[0..1] => (N3)----/

Как вы можете видеть, нейрон N4 может обрабатывать 3 записи.

Интервал [0..1] является условным, но хорошим является imo. Таким образом, вы можете легко закодировать набор общих нейронных классов, которые могут принимать произвольное количество записей (у меня были шаблонные классы С++ с количеством записей как параметр шаблона лично). Таким образом, вы кодируете логику своих нейронов один раз, затем играете со структурой сети и/или комбинациями функций внутри ваших нейронов.

Ответ 3

Как правило, вход для одного нейрона - это значение от 0 до 1. Это соглашение предназначено не только для простоты реализации, но и потому, что нормализация входных значений в один и тот же диапазон гарантирует, что каждый вход имеет аналогичный вес. (Если у вас есть изображения с 8-битным цветом с пиксельными значениями от 0 до 7, а некоторые изображения с 16-битным цветом с пиксельными значениями от 0 до 255, вы, вероятно, не хотели бы использовать 24-битные цветные изображения только потому, что числовые значения выше. Аналогично, вы, вероятно, захотите, чтобы ваши изображения были одинаковыми.)

Что касается использования значений пикселей в качестве входных данных, очень часто пытаться собрать изображение более высокого уровня изображения, чем его пиксели (больше информации). Например, при изображении 5 × 5 (нормализованное) серого масштаба:

[1 1 1 1 1]
[0 0 1 0 0] 
[0 0 1 0 0] 
[0 0 1 0 0] 
[0 0 1 0 0]

Мы могли бы использовать следующие функциональные матрицы для поиска горизонтальных, вертикальных и диагональных функций изображений. Для получения дополнительной информации см. обнаружение лица python haar.

[1 1]  [0 0]  [1 0]  [0 1]  [1 0], [0 1]
[0 0], [1 1], [1 0], [0 1], [0 1], [1 0]

Чтобы создать входной вектор v для этого изображения, возьмите первую матрицу функций 2x2 и примените ее с умножением по элементам к первой позиции изображения. Применяя,

[1 1] (the first feature matrix) to [1 1] (the first position in the image)
[0 0]                               [0 0] 

приведет к 2, потому что 1 * 1 + 1 * 1 + 0 * 0 + 0 * 0 = 2. Добавьте 2 к обратной стороне вашего входного вектора для этого изображения. Затем переместите эту матрицу функций в следующую позицию, одну вправо и снова примените, добавив результат к входному вектору. Делайте это повторно для каждой позиции матрицы признаков и для каждой из матриц признаков. Это создаст ваш входной вектор для одного изображения. Убедитесь, что вы создаете векторы в одном порядке для каждого изображения.

В этом случае изображение черно-белое, но с RGB-значениями вы можете расширить алгоритм для выполнения одного и того же вычисления, но добавьте 3 значения для входного вектора для каждого пикселя - по одному для каждого цвета. Это должно предоставить вам один входной вектор на изображение и один вход для каждого нейрона. Затем векторы должны быть нормализованы, прежде чем запускать сеть.

Ответ 4

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

Если вы хотите ввести, скажем, два вектора RGB (2 x 3 реала), вам нужно решить, как вы хотите объединить значения. Если вы добавите все элементы вместе и примените сигмовидную функцию, это эквивалентно получению в шести действиях "плоских". С другой стороны, если вы обрабатываете элементы R, то элементы G и элементы B все индивидуально (например, суммируете или вычитаете пары), вы на практике имеете три независимых нейрона.

Короче говоря, нет, ни один нейрон не принимает значения вектора.

Ответ 5

Это может быть то, что вы хотите, до тех пор, как вы пишете свою внутреннюю функцию соответственно.

В примерах, которые вы упомянули, используется [0; 1] как их домен, но вы можете использовать R, R² или что угодно, если функция, используемая вами в ваших нейронах, определена в этом домене.

В вашем случае вы можете определить свои функции на R3, чтобы разрешить обработку значений RGB

Тривиальный пример: используйте (x1, y1, z1), (x2, y2, z2) → (ax1 + x2, by1 + y2, cz1 + z2) в качестве вашей функции, чтобы преобразовать два цвета в один, ab и c являющийся вашим учебным кодом, который вы определите на этапе обучения.

Очень подробная информация (включая ответ на ваш вопрос) доступна в Википедии.

Ответ 6

Используйте длину волны света, нормированную на видимый спектр, в качестве входного сигнала.

В сети есть некоторые приближенные уравнения. Поиск преобразования RGB в длину волны или используйте цветовую модель HSL и извлеките компонент Hue и, возможно, используйте Saturation и Lightness. Ну...