Сохрание весов нейронной сети в Google Drive/FTP/HTTP

Проще всего сохранять веса в Google Drive, поскольку Colab и Google Drive довольно тесно интегрированы а исключением прозрачной авторизации. Т.е. даже будучи автризованным в Google Colab с учеткой Google приходится авторизовываться в Google Drive. Для мониторования Google Drive достаточно использовать код:

from google.colab import drive
drive.mount("/content/drive/")

Затем перейти по ссылке авторизации, выбрать учетку Google и получить код для вставки на станицу Google Colab.

В Google Drive в корне самим Colab-ом при сохранении notebook-ов была создана папка «Colab Notebooks». Создадим подпапку Data для сохранения datasets.

После монтирования Google Drive найти правильный путь к папки можно кликнув на кнопку с «>».

И затем выбрать Files:

Найти нужную папку и кликнуть «Copy path». Вставляем путь в код:

gdrive_path = "/content/drive/My Drive/Colab Notebooks/Data/" 

Теперь можно создавать новые файлы, например:

filename = gdrive_path + "test.txt"

with open(filename , 'w') as file:
    file.write('whatever')

!ls "/content/drive/My Drive/Colab Notebooks/Data"   

Для сохранения весов можно написать свой callback или использовать готовый:

checkpoint = ModelCheckpoint(gdrive_path + "best_weights.hdf5", monitor='loss', verbose=1, save_best_only=True, save_weights_only = True, mode='auto', period=1)
modelImage.fit(xTrain01[:500], yTrain01[:500], epochs=300, batch_size=20, validation_data = (xTrain01[500:], yTrain01[500:]), callbacks=[checkpoint])

Если не хочется при каждом дисконнекте авторизовываться на Google Drive, то можно использовать загрузку файлов на FTP. Но, в этом случае придется писать свой callback и вызывать метод для загрузки на FTP по окончании каждой эпохи.

!curl -T best_weights.hdf5 ftp://username:password@ftp.example.ru

Локально сохраненные веса будут заливатся по ftp на сервер.

import keras

class MyCallback(keras.callbacks.Callback):
  def __init__(self):
    super().__init__()

  def on_epoch_begin(self, epoch, logs={}):
    #self.epoch_time_start = time.time()  

  def on_epoch_end(self, epoch, logs=None):
    if logs['mean_squared_error'] < self.best_mse:
      print("Найдено лучшее значение MSE. Было", self.best_mse, "Новое:", logs['mean_squared_error'], "Сохраняю файл весов.")
      self.model.save_weights("best_weights.h5")
      !curl -T best_weights.h5 ftp://username:password@ftp.example.ru
      self.best_mse = logs['mean_squared_error'] #Сохраняем значение лучшего результата

Для загрузки весов после дисконнекта Google Colab можно использовать код:

#Загружаем архив с текстами с FTP/HTTP
def loadWeights(filename, fullpath):
  print("Start downloading", filename)
  !wget $fullpath

И запуск загрузки:

URL = "http://ftp.example.ru/"
filename = "best_weights.hdf5"
fullpath = URL + filename
print(fullpath)
loaded = loadWeights(filename, fullpath)
Spread the love
Запись опубликована в рубрике IT рецепты. Добавьте в закладки постоянную ссылку.

Добавить комментарий