loading saved keras model from gs to pydatalab

隐身守侯 提交于 2019-12-07 23:59:44

问题


My keras model is saved in google storage with model.save(model_name)

I cannot load the model on pydatalab. When I save the model on my local machine, I can just open it with load_model(filepath). Also I did import keras.backend as K, based on NameError when opening Keras model that uses Tensorflow Backend

I have tried the following:

  1. model = load_model(tf.gfile.Open(model_file))
    

Error: TypeError: expected str, bytes or os.PathLike object, not GFile

  1. load_model('gs://mybucket/model.h5')
    

Error: IOError: Unable to open file (unable to open file: name = 'gs://mybucket/model.h5', errno = 2, error message = 'No such file or directory', flags = 0, o_flags = 0)

  1. with file_io.FileIO(model_file, 'r') as f:
    modl = load_model(f)
    

error: TypeError: expected str, bytes or os.PathLike object, not FileIO


回答1:


Load the file from gs storage

from tensorflow.python.lib.io import file_io
model_file = file_io.FileIO('gs://mybucket/model.h5', mode='rb')

Save a temporary copy of the model locally

temp_model_location = './temp_model.h5'
temp_model_file = open(temp_model_location, 'wb')
temp_model_file.write(model_file.read())
temp_model_file.close()
model_file.close()

Load model saved locally

model = load_model(temp_model_location)



回答2:


I don't think Keras supports the TensorFlow file system which in turn knows how to read from GCS.

You could try downloading from GCS to a local path, and then reading from that to load the model.




回答3:


The following function works for retraining an already trained keras model (with new data) on gcloud machine learning platform (Thanks to Tíarnán McGrath).

def load_models(model_file):

    model = conv2d_model() #the architecture of my model, not compiled yet
    file_stream = file_io.FileIO(model_file, mode='r')
    temp_model_location = './temp_model.h5'
    temp_model_file = open(temp_model_location, 'wb')
    temp_model_file.write(file_stream.read())
    temp_model_file.close()
    file_stream.close()
    model.load_weights(temp_model_location)

    return model

For some reason, load_model from keras.models does not work for me anymore, so I have to build the model each time.



来源:https://stackoverflow.com/questions/48392457/loading-saved-keras-model-from-gs-to-pydatalab

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!