Я пишу программу для распознавания рукописных букв. У меня есть изображения размером 500px * 500px, которые я импортирую как BufferedImages, и я принимаю значение getRBG () каждого пикселя в качестве входных данных для нейронной сети, поэтому существует 250 000 входных данных. Значения для getRGB () варьируются от -16777216 (обозначает запись) до -1 (обозначает белый фон). Веса от входа до первого скрытого узла рандомизированы от 0 до 1. Я использовал сигмовидную функцию 1/(1+e^(-x))
в качестве моей функции активации, чтобы получить все значения от 0 до 1. Однако моя проблема заключается в том, что с Есть так много входов, когда я беру их точечное произведение с весами, я получаю число с огромной величиной (например, 1.3E8
или -1.3E8
). Затем, когда я помещаю это число в сигмоидную функцию, результаты всегда равны 1 или 0, поэтому, по сути, она не передает никакой ценной информации второму скрытому узлу. Кроме того, поскольку изображения преимущественно белые, большинство входных данных - -1.
Я настроил код так, чтобы он печатал значения после точечного произведения, а затем печатал его после прохождения через сигмовидную функцию.
After dot product with weights, before sigmoid function:
-1.3376484582733577E8
-1.3382651127917042E8
-1.3438475698429278E8
-1.3356711106666781E8
-1.3470225249402404E8
-1.3372922925798771E8
-1.3211961536262843E8
-1.3512040351863045E8
After sigmoid function:
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
Для редактирования значений getRGB () я использовал функцию newRGBValue = (getRGB() + 2) * (-1)
, поэтому все значения варьировались от -1 до 16777214. Однако, когда я передаю все эти значения в сигмоидную функцию, она просто возвращает 1, так как новый Точечное произведение с этими значениями - это огромные положительные числа (показано на выходе ниже).
After dot product, before sigmoid function:
1.3198725189415371E8
1.3345978405544662E8
1.3375036029244222E8
1.3278472449389385E8
1.328751157809899E8
1.3309195657860701E8
1.34090008925348E8
1.3300517803640646E8
After:
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
Есть ли лучшая функция активации, которую я должен использовать для этой программы? Или есть способ, которым я могу манипулировать входами, чтобы сигмоидальная функция подходила? Извините за этот скучный пост и заранее благодарим за понимание.