使用场景:我尝试在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帖子。