У меня есть 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, потому что это то, для чего я это реализовал. Я использовал свой собственный код.