python - 如何对抗面向 relu 的 CNN 产生的大量数字
问题描述
我有一个结构松散地接近 AlexNet 的 CNN,见下文:
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。sigmoid 的导数是s(x)*(1-s(x))
. 较大的数字将不可避免地使 sigmoid 的值变为 1,因此您会注意到在 back prop 上,您有1*(1-1)
,这显然不会下降太多。
所以我想知道有什么方法可以尝试保持较低的数字。
用 python 标记,因为这就是我在其中实现的。我使用了自己的代码。
解决方案
我在 AI 堆栈交换(它更适合)上提出了这个问题,并且通过实施正确的权重初始化,数字不会在向前或向后传递时爆炸或消失。见这里:https ://ai.stackexchange.com/questions/13106/how-are-exploding-numbers-in-a-forward-pass-of-a-cnn-combated
推荐阅读
- stripe-payments - 向现有客户添加付款方式
- postgresql - pg_dump - 如何在 postgresql 中备份公共模式中的所有视图?
- r - 如何将 mutate 和 IF 语句结合在一起?
- google-cloud-ml - 在 Vertex AI 上的 Kubeflow Pipelines 中运行 ID
- javascript - 在 midijs 中循环播放音频?
- javascript - 创建从 PDF 计算数据的工具
- c# - 如何获取和解析 CI 管道中所有生成的 coverage.cobertura 文件?
- java - 错误:服务“环境”必须是映射而不是数组
- c++ - 如何判断演示文稿是哪个全屏 Keynote 窗口?
- reactjs - 删除状态 React Hooks 中的数据