Jan*_*nnk 5 amazon-s3 bucket keras
我在 keras 中运行了一个 lstm 模型并将其保存为 json 对象。我想将此 json 对象直接写入 s3 存储桶。Boto3 教程实际上并没有涵盖这一点,它们只展示了如何将文件写入 s3。我真的需要能够将 keras 模型直接从 python(在内存中)存储到 s3 中。有任何想法吗?
由于此问题只有一个答案,请注意,model.to_json()仅保存模型架构和初始化权重,而不保存训练后的权重。不幸的是,keras API 文档对此并不清楚,但如果您使用它加载模型,model_from_json它将运行,但使用初始权重。因此,你的模型的输出可能是荒谬的。
目前似乎没有一种简单的方法可以直接从内存写入模型文件(尽管请查看此处的示例)。
为了保存经过训练的权重的模型,请使用 keras文档中提出的保存模型对象的方法。
from keras.models import load_model
import boto3
model.save('my_model.h5') # creates a HDF5 file 'my_model.h5'
client = boto3.client('s3')
client.upload_file(Filename='my_model.h5',
Bucket=BUCKET_NAME,
Key='my_model.h5')
del model # deletes the existing model
Run Code Online (Sandbox Code Playgroud)
要下载模型并加载它:
client.download_file(BUCKET_NAME,
'my_model.h5',
'my_model.h5')
# returns a compiled model
# identical to the previous one
model = load_model('my_model.h5')
Run Code Online (Sandbox Code Playgroud)
如果您不想在本地保存该文件,则可以再次删除该文件。
小智 1
您可以使用Client.put_object()直接写入 S3 对象,而无需保存和上传文件。这是一个具体的例子:
import boto3
# Convert your existing model to JSON
saved_model = model.to_json()
# Write JSON object to S3 as "keras-model.json"
client = boto3.client('s3')
client.put_object(Body=saved_model,
Bucket='BUCKET_NAME',
Key='keras-model.json')
Run Code Online (Sandbox Code Playgroud)
然后,您可以下载该文件keras-model.json,然后使用 将其加载回 Keras 模型,如下所示model_from_json。
from keras.models import model_from_json
# Read the downloaded JSON file
with open('keras-model.json', 'r') as model_file:
loaded_model = model_file.read()
# Convert back to Keras model
model = model_from_json(loaded_model)
# Confirmation
model.summary()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6373 次 |
| 最近记录: |