tf.keras重命名模型层名
前因后果
为什么要重新命名模型的层名呢,目前做的是一个多任务的网络,两个网络用的是分开的 backbone,如果就这样并在一起作为一个模型的话就会有重复的层名,这个是不允许的,因此必须要重命名层名。
解决方法
方法一:初始化模型的时候设置不同名字
其实比较好的解决方法就是在模型的层名中加一个 prefix,对于不同的任务可以定义不同的 prefix,不过这样有一个问题,那就是载入参数的时候不能使用 by_name=True
。
方法二:改层名
不过因为我是直接用的官方的库,不想自己改 backbone,所以就只能退而求其次修改层名了,修改方法为:
model.layers[idx]._name = 'aux_' + l.name
层的 name 属性是一个 property,不能修改,如果要修改的话使用 _name 属性,不过 _name 是一个 protected 属性,这么修改可能不是最好的方法。