【发布时间】:2018-08-02 02:40:49
【问题描述】:
我使用 Keras 库创建了一个模型,并将模型保存为 .json 及其权重,扩展名为 .h5。如何将其下载到我的本地计算机上?
为了保存我遵循的模型link
【问题讨论】:
标签: python-3.x google-colaboratory
我使用 Keras 库创建了一个模型,并将模型保存为 .json 及其权重,扩展名为 .h5。如何将其下载到我的本地计算机上?
为了保存我遵循的模型link
【问题讨论】:
标签: python-3.x google-colaboratory
下载到本地系统:
from google.colab import files
#For model json
model_json = model.to_json()
with open("model1.json","w") as json_file:
json_file.write(model_json)
files.download("model1.json")
#For weights
model.save('weights.h5')
files.download('weights.h5')
【讨论】:
这对我有用! 使用 PyDrive API
!pip install -U -q PyDrive
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
# 1. Authenticate and create the PyDrive client.
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)
# 2. Save Keras Model or weights on google drive
# create on Colab directory
model.save('model.h5')
model_file = drive.CreateFile({'title' : 'model.h5'})
model_file.SetContentFile('model.h5')
model_file.Upload()
# download to google drive
drive.CreateFile({'id': model_file.get('id')})
权重相同
model.save_weights('model_weights.h5')
weights_file = drive.CreateFile({'title' : 'model_weights.h5'})
weights_file.SetContentFile('model_weights.h5')
weights_file.Upload()
drive.CreateFile({'id': weights_file.get('id')})
现在,检查你的谷歌驱动器。
下次运行时,尝试重新加载权重
# 3. reload weights from google drive into the model
# use (get shareable link) to get file id
last_weight_file = drive.CreateFile({'id': '1sj...'})
last_weight_file.GetContentFile('last_weights.mat')
model.load_weights('last_weights.mat')
一种更好的新方法(更新后)...忘记以前的方法(也有效)
# Load the Drive helper and mount
from google.colab import drive
drive.mount('/content/drive')
系统将提示您进行授权 在浏览器中转到此 URL:类似于: accounts.google.com/o/oauth2/auth?client_id=.....
从链接中获取授权码,在空格处粘贴你的授权码
那么就可以正常使用驱动器作为自己的磁盘了
直接保存权重甚至整个模型
model.save_weights('my_model_weights.h5')
model.save('my_model.h5')
甚至更好的方法是使用回调,它会自动检查每个时期的模型是否比保存的最佳模型更好,并保存迄今为止验证损失最好的模型。
my_callbacks = [
EarlyStopping(patience=4, verbose=1),
ReduceLROnPlateau(factor=0.1, patience=3, min_lr=0.00001, verbose=1),
ModelCheckpoint(filepath = filePath + 'my_model.h5',
verbose=1, save_best_only=True, save_weights_only=False)
]
并在model.fit中使用回调
model.fit_generator(generator = train_generator,
epochs = 10,
verbose = 1,
validation_data = vald_generator,
callbacks = my_callbacks)
您可以稍后加载它,即使使用以前的用户定义的损失函数
from keras.models import load_model
model = load_model(filePath + 'my_model.h5',
custom_objects={'loss':balanced_cross_entropy(0.20)})
【讨论】:
只需使用 model.save()。下面我创建了一个变量来存储模型的名称,然后我用 model.save() 保存它。我使用了 google collab,但它应该适用于其他 s enter image description here
【讨论】:
试试这个
from google.colab import files
files.download("model.json")
【讨论】:
这是一个对我有用的解决方案:
设置身份验证 b/w Google Colab 和您的云端硬盘:
步骤:
-粘贴如下代码
-此过程将生成两个 URL 以完成身份验证,您必须在其中复制令牌并粘贴到提供的栏中
!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse
from google.colab import auth
auth.authenticate_user()
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()
import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
身份验证完成后,使用以下代码建立连接:
!mkdir -p drive
!google-drive-ocamlfuse drive
现在查看您的 Google 云端硬盘中的文件列表:
!ls drive
将 Keras 模型输出保存到 Drive,过程与存储在本地驱动器中完全相同:
-照常运行 Keras 模型
一旦模型经过训练,您希望将模型输出(.h5 和 json)存储到您的 Google Drive 的 app 文件夹中:
model_json = model.to_json()
with open("drive/app/model.json", "w") as json_file:
json_file.write(model_json)
# serialize weights to HDF5
model.save_weights("drive/app/model_weights.h5")
print("Saved model to drive")
您将在 Google Drive 的相应文件夹中找到文件,您可以从该文件夹中下载,如下所示:
【讨论】:
files.download 不允许你直接下载大文件。一种解决方法是使用下面的 pydrive sn-p 将您的权重保存在 Google 驱动器上。只需更改 filename.txt 为您的 weights.h5 文件
# Install the PyDrive wrapper & import libraries.
# This only needs to be done once in a notebook.
!pip install -U -q PyDrive
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
# Authenticate and create the PyDrive client.
# This only needs to be done once in a notebook.
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)
# Create & upload a file.
uploaded = drive.CreateFile({'title': 'filename.csv'})
uploaded.SetContentFile('filename.csv')
uploaded.Upload()
print('Uploaded file with ID {}'.format(uploaded.get('id')))
【讨论】:
要将模型下载到本地系统,可以使用以下代码 - 下载json文件:
model_json = model.to_json()
with open("model1.json","w") as json_file:
json_file.write(model_jason)
files.download("model1.json")
下载权重:
model.save('weights.h5')
files.download('weights.h5')
【讨论】:
您可以在训练后运行以下内容。
saver = tf.train.Saver()
save_path = saver.save(session, "data/dm.ckpt")
print('done saving at',save_path)
然后检查保存ckpt文件的位置。
import os
print( os.getcwd() )
print( os.listdir('data') )
终于下载了带权重的文件!
from google.colab import files
files.download( "data/dm.ckpt.meta" )
【讨论】: