cannot be saved because the input shapes have not been set【解决办法】

今天爱分享给大家带来cannot be saved because the input shapes have not been set【解决办法】,希望能够帮助到大家。

在进行保存模型时,TF2.0有三种保存方式,分别是model.save_weights(‘filepath’);model.save(‘filepath’,save_format=’tf’);tf.saved_model.save(model,’filepath’)

三种方式都有各自的特点:

save_weights只保存模型权重,意味着当你要加载模型时,需要先搭建原来的模型,然后load一下参数从文件中,加载参数文件使用model.load_weights(‘filepath’)。
model.save保存整个模型,包括模型参数,模型的输入输出,优化器的配置等,TF支持保存两种格式的文件:
H5格式的文件,使用方式为model.save(‘path.h5’),h5格式的文件内容比较全,一般文件比较大。(注意:如果是用户自定义模型,采用的是subclassing方式创建的,则无法保存为H5格式的文件,会报错!)
pb格式的文件,使用方式为model.save(‘path’,save_format=’tf’),pb格式的文件一般适合用来部署,文件的大小要小一点。
tf.saved_model.save(model,’filepath’)保存整个模型,是TF2.0中支持的方法,一般也是用来模型部署的。模型加载预测起来比较麻烦一点
开始进入主题:

在model.save(‘filepath’, save_format=’tf’)时出现以下错误信息:

信息显示没有定义input shape,按照一般情况,model会自动识别input shape但是显示好像并没有,可能是我的模型是自定义的关系,训练也是自定义所以无法自动识别出这个shape来。

完整的报错信息如下:

ValueError: Model <__main__.MyModel object at 0x00000216D2453F48> cannot be saved because the input shapes have not been set. Usually, input shapes are automatically determined from calling .fit() or .predict(). To manually set the shapes, call model._set_inputs(inputs).

根据显示信息,需要手动设置input的shape,查阅很多博客,并没有找到相似的问题,Stack Overflow有类似的,但没有得到解决~

经过不断尝试,终于找到了一种方法解决了这个问题,但可能不一定最优。以下是我的解决方法:

原始的模型创建是这样的:

修改之后的亚子是这样的:

添加了一行,手动设置inputs的维度,内容和input_signature中的内容是一样的

人已赞赏
Python

can't pickle generator objects【解决办法】

2020-11-20 11:07:17

Python

数据归一化(或者标准化,注意归一化和标准化不同)的原因是什么【机器学习面试题】

2020-11-23 11:32:57

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
'); })();