我正在尝试制作一个用于 3D 图像识别的 CNN,但预计所有内容都只有三分之一。在第一个时期,预测甚至很快收敛。我已经为此工作了一个星期,完全迷失了方向。
我有自己的几个猜测,为什么它总是收敛到一个类。
- 我的 3D 张量很大,为 40x35x30,并且有很多空白,因为我必须将我的对象放在立方体盒子中。这会有问题吗?
- 我只有约 5000 个用于训练的样本和约 500 个用于测试集的样本。我的样品太少了吗?
- 我的标签有 3 个类,大约 75% 的整个数据属于第 1 类。在第一个 epoch 期间,我的模型快速收敛,将 99% 的数据预测为该类。这种不平衡的数据会导致问题吗?
- 我的模型设计为
conv1(kernel_size=10,stride=1,filter=32)-batch_norm1-maxpool1-conv2(8,1,64)-batch_norm2-maxpool2-conv3(8,1,64)-maxpool3-fc4( 1024)-batchnorm4-dropout4(20%)-fc5(384)-batchnorm5-dropout5(20%)-fc6(3)
我在 -1 和 1 之间标准化了输入 我对卷积层使用了leaky-relu 激活。我使用衰减率为 0.99 的 Adam 优化器。
首先,我不确定是否可以在每一层执行批量标准化。我是否错过了在这里设计 CNN 模型的任何重要概念? - 或者也许我的数据很糟糕。我有点怀疑我的数据彼此之间没有显着差异,而且根本没有模式。在这种情况下,是否有任何统计方法/模型来检查我的数据是否有有意义的差异?(3D 图像是 3D 空间中的一些化学/物理数据,我将其转换为 numpy 矩阵)
但我认为这更像是消失的问题,因为当我用 Xavier 的方式初始化变量时,到类 #1 的收敛速度较慢。请有人帮助我:(