google colaboratory, weight download (export saved models)
This worked for me !!Use PyDrive API
!pip install -U -q PyDrivefrom pydrive.auth import GoogleAuthfrom pydrive.drive import GoogleDrivefrom google.colab import authfrom 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 directorymodel.save('model.h5') model_file = drive.CreateFile({'title' : 'model.h5'})model_file.SetContentFile('model.h5')model_file.Upload()# download to google drivedrive.CreateFile({'id': model_file.get('id')})
Same for weights
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')})
Now, check your google drive.
On next run, try reloading the weights
# 3. reload weights from google drive into the model# use (get shareable link) to get file idlast_weight_file = drive.CreateFile({'id': '1sj...'}) last_weight_file.GetContentFile('last_weights.mat')model.load_weights('last_weights.mat')
A Better NEW way to do it (post update) ... forget the previous (also works)
# Load the Drive helper and mountfrom google.colab import drivedrive.mount('/content/drive')
You will be prompted for authorizationGo to this URL in a browser: something like :accounts.google.com/o/oauth2/auth?client_id=.....
obtain the auth code from the link, paste your authorization code in the space
Then you can use drive normally as your own disk
Save weights or even the full model directly
model.save_weights('my_model_weights.h5')model.save('my_model.h5')
Even a Better way, use call backs, which automatically checks if the model at each epoch achieved better than the best saved one and save the one with best validation loss so far.
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) ]
And use the call back in the model.fit
model.fit_generator(generator = train_generator, epochs = 10, verbose = 1, validation_data = vald_generator, callbacks = my_callbacks)
You can load it later, even with a previous user defined loss function
from keras.models import load_modelmodel = load_model(filePath + 'my_model.h5', custom_objects={'loss':balanced_cross_entropy(0.20)})
Here is a solution that worked for me:
Setup authentication b/w Google Colab and Your Drive:
Steps:
-Paste the code as is below
-This process will generate two URLs for authentication to complete, where you would have to copy the tokens and paste in the bar provided
!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 fusefrom google.colab import authauth.authenticate_user()from oauth2client.client import GoogleCredentialscreds = GoogleCredentials.get_application_default()import getpass!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URLvcode = getpass.getpass()!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
Once this authentication is done, use the following codes to establish the connection:
!mkdir -p drive!google-drive-ocamlfuse drive
Now to see the list of files in your Google Drive:
!ls drive
To save the Keras model output to Drive, the process is exactly the same as storing in local drive:
-Run the Keras model as usual
Once the model is trained say you want to store your model outputs (.h5 and json) into the app
folder of your Google Drive:
model_json = model.to_json()with open("drive/app/model.json", "w") as json_file: json_file.write(model_json)# serialize weights to HDF5model.save_weights("drive/app/model_weights.h5")print("Saved model to drive")
You will find the files in the respective folder of Google Drive, from where you can download as we can see below: