首先,实验经历来说,做个模型融合还是蛮有用的,直接0.5几蹦到0.6多。。。
并且,从机器学习理论上来说,拿来融合的几个模型,模型间的差异越大,融合后的效果会越好。。。
我用的是很low的方法,就是,
我做的是图像分割嘛,也就是图像的每个像素点的分类。
分别对两个网络进行test,test的图像过一遍模型后,会得到图像的每个像素点的logits值(解释一下,如果是 0 1 分割,那么每个像素点就相当于有两种可能值,mxn的图像,就会得到mxnx2的一个矩阵,这个2,就是每个像素点属于 0 或者 1 类别的网络计算值 ),然后还得做一个softmax操作,softmax() 函数就是有把网络计算的某像素点在两个类别上的值转化为概率分布的功力,让这组矩阵变成概率分布的情况,然后好进一步的做交叉墒计算(扯的有点远。。。tensorflow那本书有详细的介绍)softmax的结果存成.npy格式。
反正就是,分别对两个网络的logits做完softmax(存成npy格式)之后,把两个npy文件求个均值(这就是最简单的融合了,,,(a+b)/2 ),其实还可以对两部分给予不同的权值去融合softmax的值。。。不过权值怎么给?,有待考究。。。
得到平均后的softmax了,再进行一下argmax()(我的上一篇博文有说),就是找到矩阵(这个问题里就是在2个维度里找就是了)中最大值出现的位置,也即得到该像素点最终被分到的类别号了。。。
以上就完成了融合得到最终的图像分割结果了。。。。