Как сохранить объект нейросети Lasagne
Я пытаюсь тренировать CNN, используя лазанью и NoLearn. После того, как обучение закончено, я хочу сохранить параметры нейросети.
В частности,
nn = net1.fit(X_train, y_train) # train neural net
with open('nn.pickle', 'wb') as f:
pickle.dump(nn2, f, -1)
Я не могу использовать pickle(), потому что размер объекта (nn) составляет несколько десятков ГБ. Как я могу хранить объекты такого размера на диске?
Avisek
2 ответа
Вместо сохранения всей сети с помощью pickle, вы можете сохранить только ее параметры, используя:
values = lasagne.layers.get_all_param_values (net1)
В официальном уроке по лазанью вы можете видеть, что get_all_param_values возвращает список массивов-пустышек, представляющих значения параметров. Вы можете сохранить их, используя numpy.savez, способный хранить несколько массивов в одном файле в несжатом формате.npz. Вы также можете сжать их, используя numpy.savez_compressed.
Чтобы загрузить параметры в ваш CNN, сначала вы должны сгенерировать сетевую архитектуру (очевидно, она должна быть такой же, как вы ранее обучались), затем вы можете загрузить с диска параметры с помощью np.load и, наконец, назначить их сетевым вызовам.:
lasagne.layers.set_all_param_values (net1, values)
Если вы хотите сохранить объект Python на диск, вам нужна сериализация. Когда вы хотите сериализации, вам нужно pickle
или... это "брат" cPickle
который иногда может быть в тысячи раз быстрее, чем pickle
,