Keras 预测和 Sagemaker 预测是不同的

时间:2021-07-31 04:04:43

标签: python tensorflow machine-learning keras amazon-sagemaker

我正在尝试使用 amazon sagemaker 部署 tensorflow keras 模型。过程成功完成,但是当直接使用 keras 进行预测和调用 sagemaker 端点进行预测时,我得到了不同的预测结果。

我使用了 these 个步骤将模型部署到 sagemaker。

检查以下示例。

data = np.random.randn(1, 150, 150, 3)

# predict using amazon sagemaker
sagemaker_predict = uncompiled_predictor.predict(data)
print(sagemaker_predict)

#predict same using keras
val = model.predict(data)
print(val)


>>{'predictions': [[0.491645753]]}
[[0.]]

这是应该发生的事情吗?据我所知,它应该是一样的。由于某种原因,数据被破坏或 sagemaker 权重被重新初始化。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

不应该发生。
如果您将模型直接部署到 TensorFlow 服务(这是 SageMaker 推理容器包装的内容),看看您会得到什么。
为了更快地进行实验,您可以使用 SageMaker inference container in local mode,,这样您就可以在几秒钟内启动/停止内科检查。

答案 1 :(得分:0)

终于找到了解决办法。 .h5 (HDF5) 权重文件似乎有问题,出于某种原因,sagemaker 似乎没有从 .h5 中提取权重。因此将权重文件更改为 TensorFlow SavedModel 格式

至于tensorflow keras的保存和序列化documentation

<块引用>

您可以使用两种格式将整个模型保存到磁盘:TensorFlow SavedModel 格式和较旧的 Keras H5 格式。推荐的格式是 SavedModel。这是您使用 model.save() 时的默认设置。

<块引用>

您可以通过以下方式切换到 H5 格式:

<块引用>

将 save_format='h5' 传递给 save()。 将以 .h5 或 .keras 结尾的文件名传递给 save()

所以,而不是将权重保存为

model.save("my_model.h5")

另存为

model.save("my_model")

并加载与

相同的权重
keras.models.load_model("my_model")

这会将您的文件保存为 TensorFlow SavedModel 格式,您可以在上述文档中按照该格式加载并部署到 sagemaker。

相关问题