tf.saved_model.save报错解决

前几天写了一篇同样关于 tf.saved_model.save报错的解决文章,不过这次的错误不太一样。

上一篇文章:

savemodel报错

值得注意的是:

我使用的模型是自定义模型,而不是使用keras.model中的Sequential()封装的函数,所以不能使用model.save(‘xxx.h5’)对模型进行保存,只能通过tf.saved_model或者是save_weights来保存。

这次我同样是搭建GAN网络来破解口令,不同的是生成器方面,不再使用卷积核激活,而是使用LSTM网络代替,训练后保存模型时会报错:
TypeError: can’t pickle _thread.lock objects
在这里插入图片描述

这个错误搜索后发现是线程的问题,但是网上很难找到和模型保存相关的解决方案,于是我仔细查看了一下,发现只是生成器保存会出现问题,判别没有问题,再看一下错误提示,发现从deepcopy处产生的错误
tf.saved_model.save报错解决_第1张图片
查看模型代码后,我发现在自定义模型的call函数中,我为了区分两个变量,使用了copy.deepcopy函数,经过测试后我发现,只要在自定义模型的call函数中使用deepcopy函数,那么tf.saved_model.save就会报上面的错误,替换上述语句,这里我采用的是列表存储,之后代码就可以正常了。

你可能感兴趣的:(tensorflow,python,tensorflow)