在Google App Engine中加载Keras模型

使用场景:我尝试在Google App Engine中加载一个预训练的Keras模型,模型格式为.h5文件。我使用的是Python运行时3.7和标准环境的App Engine。

问题:我尝试使用load_model()函数来加载模型。不幸的是,load_model函数需要一个’file_path‘参数,我无法从Google App Engine的文件浏览器中加载模型。此外,Google云存储似乎也不是一个选项,因为它不被识别为文件路径。

问题:

(1) 如何在不先本地保存的情况下,将预训练模型(如.h5)加载到Google App Engine中?

(2) 可能有我没想到的方法,可以从Google存储中将model.h5加载到Google App Engine中,例如使用其他函数(而不是tf.keras.models.load_model())或使用其他格式?

我只想读取模型以进行预测,不需要写入或训练模型。


回答:

您必须先下载文件,然后才能使用它,云存储路径无法直接访问对象。文档中有一个关于如何下载对象的示例,请参见文档

from google.cloud import storagedef download_blob(bucket_name, source_blob_name, destination_file_name):    """Downloads a blob from the bucket."""    # bucket_name = "your-bucket-name"    # source_blob_name = "storage-object-name"    # destination_file_name = "local/path/to/file"    storage_client = storage.Client()    bucket = storage_client.bucket(bucket_name)    blob = bucket.blob(source_blob_name)    blob.download_to_filename(destination_file_name)    print(        "Blob {} downloaded to {}.".format(            source_blob_name, destination_file_name        )    )

然后将文件写入/tmp 临时文件夹,这是App Engine中唯一可用的文件夹。但请注意,一旦使用该文件的实例被删除,文件也将被删除。

更具体地回答您的问题,加载Keras模型时,将模型保存为pickle格式会很有帮助,如这个教程所示:

def _load_model():    global MODEL    client = storage.Client()    bucket = client.get_bucket(MODEL_BUCKET)    blob = bucket.get_blob(MODEL_FILENAME)    s = blob.download_as_string()    MODEL = pickle.loads(s)

我还找到了一篇回答,它涵盖了您实际寻找的内容,来自另一个Stackoverflow帖子。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注