问题:
tensorflow.keras.models.save_model 报错:TypeError: can’t pickle _thread.RLock objects
参考链接:
https://github.com/keras-team/keras/issues/8343
原因分析:
tf.keras.layers.Lambda(
function, output_shape=None, mask=None, arguments=None, **kwargs
)
上面的匿名函数层 Lambda 的第一个参数 function 在定义时用到了类属性,这样在模型保存时,便会遇到标题中的报错。示例及修改方法如下:
# function 函数原始定义中使用了类属性 self.mean_dim
def my_layer(inputs):
new_layer = [
Dense(self.mean_dim, activation="relu", name="my_layer")
]
# 将函数定义中的类属性赋值为共有属性,便可解决:
mean_dim = self.mean_dim
def my_layer(inputs):
new_layer = [
Dense(mean_dim, activation="relu", name="my_layer")
]