很多使用了自定义函数的神经网络,例如MobileNetV2SSD,在加载模型的时候会提示unknown loss:XXXX 或者 unknown metrics:XXXX
网络上给出了一些使用custom_objects={‘loss’:custom_loss}的解决方法,但是这个办法在一些特殊情况下并不能解决问题,这里给出一个可行的解决办法。
原理是load_model的时候会自动编译,这个时候会找不到我们自定义的损失函数,而通过字典的方式传入也会产生一些问题,所以我们所需要做的就是关闭自动编译,采用手动编译的方式,重新把自定义的代价函数添加进我们的模型中。
代码如下:
ssd_model = load_model('mytest',compile=False)
ssd_model.compile(optimizer=Adam(learning_rate=1e-3),loss=[ssd_custom_losses.loc_loss_fn, ssd_custom_losses.conf_loss_fn])