keras版本AdaBN复现的效果
越来越多的小伙伴咨询AdaBN是怎么回事,怎么复现,效果则么样。先不说代码怎么复现,先看看效果如何。
首先放一下张伟大佬的硕士毕业论文里面的AdaBN算法猥代码:
从上面两个图理解,就是把分别处于两种载荷情况下的相同机理的故障作为原领域数据和目标领域数据,先训练目标领域的数据,这时候卷积神经网络做正向传播和反向传播(即在定义模型训练过程中保留训练集和测试集)代码如下:
model.fit(X_train, Y_train,validation_data=(X_test, Y_test),epochs=20,batch_size=128)#正向传播反向传播都有
然后把模型以h5的形式进行保存
model.save('C:/Users/1/Desktop/目标领域.h5')
此时此刻已经完成了伪代码中提到的BN层参数替换的权重参数
训练结果如下图所示:
在上图中红色曲线表示训练集正确率,绿色曲线代表测试集正确率,蓝色曲线代表训练集损失函数值,橙色曲线代表测试集损失函数值
接下来需要将数据回归到原领域,在原领域中使用训练目标域时候的BN权重,且保持BN权重不进行更新,同时定义源领域只做正向传播(即去掉定义训练中的测试集)代码如下:
history=model.fit(X_train, Y_train,epochs=20,batch_size=128)
训练结果如下图所示:
上图中橙色直线表示正确率,蓝色直线代表目标函数值。
训练完源领域数据后保存最终AdaBN模型:
model.save('C:/Users/1/Desktop/AdaBN.h5')
最终进行测试对比,我再训练过程中以及预测过程中的数据具体划分形式为:
源领域:凯斯西储大学,轴承故障数据,48K中第一行,无载109、122、135三个故障数据
目标领域:凯斯西储大学,轴承故障数据,48K中第二行,负载1中的110、123、136三个数据
为了体现效果,直接拿目标领域训练保存的模型对负载一中的数据进行预测,预测结果如下:
然后拿AdaBN结果进行预测
预测结果显而易见,这还不是用的原领域数据进行训练再去预测目标领域的结果,而是直接目标领域训练结果模型的预测效果,可见AdaBN泛化能力非常强势。
最后说明一下,本人就要毕业了,CSDN以后不会再更新了,有问题就在帖子下方留言,有时间一定回复。
要AdaBN算法代码的可以私信我,这里不再放出,可根据我前几篇帖子自己琢磨出来