1

​ 调整了很多天的网络终于是开始拟合,并且有了一些很不错的效果,小记一下最近的调参过程。这个网络本身是根据Unet魔改而来,从一维的输入变成了高维的输入,从而使得两支具有不同的尺寸。因此主要的问题集中在如何调和两支的尺寸从何合并,这里我开始直接使用了全局池化来手动降维,实际上这里应该是可以使用更好的方法,比如外加一个小型的神经网络来进行特征的提取。不过考虑到后面的部分早就经过了卷积的过程,因此也就没有这个部分。现在想想,其实应该在纵向及横向上分别使用可分离卷积,这样会是更加合理的特征提取手段。

​ 最初的问题是,回归的结果充满了高频的信息,我首先想到的是激活函数的问题,经过再三确定,Phasenet使用的确实是softmax激活层,这个函数在我的理解更多的使用在分类问题中。不过可能对应的,标签使用的是矩形窗而非高斯窗。因此我换成了sigmoid函数,这使得回归结果有所改善,但是依然没有解决问题。其次我在输出层做了一点小trick,加上了平均池化层,以期待让输出的高频问题得到改善,结果却依旧寥寥。最后我考虑到是否是第一个卷积块的输出带有过多的高维信息,从而使得最终的卷积层不可避免地带有高频量,但是在删除了最后的concentrate层后,依旧没有改善。并且在改善过程中,遇到了回归结果趋向于一条直线的问题,我起初认为这是loss函数的问题,但是在加大高斯窗口平衡权重比后依旧没有解决,之后想到了使用focal loss来解决这个问题,但是借用的代码却没有显示出相应的优势。同时对于metrics的选择也从acc变成k3acc以及mse,后来想到这应该是不会影响训练过程。其中值得一提的是,我对输入进行了归一化,让输入介于0,1之间,但是收效甚微。

​ 我在int上查找回归问题常见的问题,也有所收获,认为回归问题不能加BN层的,认为不能加dropout层的,都有。但是在删除这些层之后,网络会在理想最大值位置有所改良,但是在噪声位置的高频输出依旧是没有改善。将激活函数改成tanh、将loss改为huber、将卷积核数量增减等操作都没有改变问题。

​ 现在想想,我确实是把所有能够调整的地方全都调整了一遍。那么最后是怎么让网络收敛的呢。其实还是输入数据的问题,在查证输入函数时,确定某个函数存在重复导入同一个文件的问题。本以为这是问题所在,但网络依然是没有收敛。但是对于输入的统计分析,让我发现输入数据的分布极其分散,有效信息的振幅远大于噪声,在归一化后,由于边界值取决于最大最小值,因此不同的特征图归一化结果大相径庭。我在最后,选择了arctan函数对数据进行了归一化,这真是一个理想的函数,能够在全空间对数据进行大幅度的压缩。

​ 最终的结果终于确定,确实是数据规范化的问题,这里也终于是明白,单纯的归一化并不有效,使得最后数据满足近似高斯分布才能更好的进行训练