我正在与keras在v2.12.0
中保存模型的方式作斗争。它似乎不向后兼容。是我弄错了什么,还是我们必须重构代码才能迁移到v2.12.0
?
以下是我们保存模型的旧方法(v2.7.0
):传递有效的.h5
文件(!)路径到keras,瞧,磁盘上出现了一个同名的.h5
文件:
model = tf.keras.models.Sequential(...)
model.compile(...)
model.save('my_model.h5')
下面的代码将被v2.12.0
放大:
`tensorflow.python.framework.errors_impl.FailedPreconditionError: /tmp/tmpt118zg26 is not a directory`.
我知道v2.12.0
提供了两个选项:
- 保存到folders的新方法通过
tf.saved_model.save()
启用 tf.keras.saving.save_model
仍然支持保存到文件的old way。显然,model.save()
将用作tf.keras.saving.save_model()
的别名
release notes还指出
已将所有与保存相关的实用程序移动到新的命名空间,例如keras.saving
以前的API位置(在keras.utils
和keras.models
中)将无限期可用,但我们建议您更新代码以指向新的API位置。
那么,为什么上面的代码会突然失败呢?
- 我还可以使用“现有方法”直接保存.h5吗?如果是,如何进行?这不是应该向后兼容吗?现在我是否需要重写代码(如果我想坚持写文件,我是否需要对
tf.keras.saving.save_model()
进行一行更改)? - 或者,我们必须保存到文件夹中,而不是文件?那迁移的路径是什么所有模型都放在一个文件夹中,还是它们会互相覆盖?那么,我们是否需要嵌套文件夹,并重新设计在其他地方同步这些模型的方式(例如,必须调用
aws s3 sync 'folder'
而不是boto3
调用client.upload_file()
将模型转移到AWS)?
1条答案
按热度按时间zbdgwd5y1#
我在更新Keras到2.12后也遇到了这个问题。原来我的脚本的完整路径有拉丁字符('ç'和'õ'),删除它们修复了它。显然这个版本的Keras不接受非UTF8字符。