最近在作两个网络的整合工作,想着能不能用keras中的load_weights()函数来实现两次加载不同的预训练好的网络权重,最终发现是能够实现这样的操作的,只要保证你需要整合的最终网络中各层的名字与两个网络种的各层名字是保持一致的,则可以通过两次的load_weights(model_weights_path, by_name = True)调用,从而加载好了预训练好的两个模型。之后再进行微调或者迁移学习。
以前也纠结过一段时间,就是基于CNN的框架对于不同图片大小的输入时是否可以直接使用别人训练好的weights,找了一段时间网上的资料,好像没有关于这方面的讲解。后来自己想了想,其实是一个很简单的问题,CNN中的weights本身就和输入的大小无关,只和kernel_size,filter_num,channel_num这三个参数有关,所以不同大小的输入是可以加载的。但是后面可能会出现其他的问题,这个就需要自己斟酌斟酌了。
model = ShuffleNet(include_top=True, input_shape=(width,height,3),classes = 100, groups=3, pooling='avg')
model.summary()
model.load_weights(model1_weights_path, by_name = True)
model.load_weights(model2_weights_path, by_name = True)