如何应对以Relu为导向的CNN产生的巨大数量

时间:2019-06-27 03:22:47

标签: python conv-neural-network backpropagation

我有一个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和无穷大,具体取决于权重的负值。我想知道有什么方法可以解决这个问题,因为我想避免使用大量方法。

由此引起的一个问题是,如果您在最后一层中使用了Sigmoid。视作S形的导数是s(x)*(1-s(x))。拥有更大的数字将不可避免地产生S型1的价值,因此您会在后支撑上注意到1*(1-1),显然下降得并不好。

所以我想知道任何尝试保持较低数字的方法。

用python标记,因为这是我实现的目的。我使用了自己的代码。

1 个答案:

答案 0 :(得分:0)

我在交换AI堆栈(更适合它)时问了这个问题,并且通过实施正确的权重初始化,数字不会在反向传递时爆炸或消失。看到这里:https://ai.stackexchange.com/questions/13106/how-are-exploding-numbers-in-a-forward-pass-of-a-cnn-combated