Как бороться с огромными числами, созданными ориентированной на CNN CNN - PullRequest
0 голосов
/ 27 июня 2019

У меня есть CNN со структурой, слабо близкой к AlexNet, см. Ниже:

Convolutional Neural Network structure:
100x100x3      Input image
25x25x12       Convolutional layer: 4x4x12, stride = 4, padding = 0
12x12x12       Max pooling layer: 3x3, stride = 2
12x12x24       Convolutional layer: 5x5x24, stride = 1, padding = 2
5x5x24         Max pooling layer: 4x4, stride = 2
300x1x1        Flatten layer: 600 -> 300
300x1x1        Fully connected layer: 300
3x1x1          Fully connected layer: 3

Очевидно, что при использовании только максимального пула и сверточных слоев числа будут приближаться к 0 и бесконечности, в зависимости от того, насколько отрицательны веса. Меня интересовали какие-либо подходы к борьбе с этим, поскольку я хотел бы избежать больших чисел.

Одна проблема, которая возникает из-за этого, если вы используете сигмоид в последних слоях. Видя, как производная сигмоида составляет s(x)*(1-s(x)). Наличие больших чисел неизбежно приведет к значению сигмоида 1, и поэтому вы заметите, что на задней опоре у вас есть 1*(1-1), что, очевидно, не слишком хорошо снижается.

Так что я хотел бы знать о любых способах удерживать цифры на низком уровне.

Tagged with python, потому что это то, для чего я это реализовал. Я использовал свой собственный код.

1 Ответ

0 голосов
/ 18 июля 2019

Я задал этот вопрос об обмене стека ИИ (для которого он лучше подходит), и благодаря правильной инициализации веса числа не взорвутся и не исчезнут при обратном проходе или .Смотрите здесь: https://ai.stackexchange.com/questions/13106/how-are-exploding-numbers-in-a-forward-pass-of-a-cnn-combated

...