Я пытаюсь сохранить модель, полученную во время обучения многослойной сети Perceptron, построенной с помощью Theano, в соответствии с http://deeplearning.net/tutorial/code/mlp.py, используя код, показанный в логистическом регрессоре по адресу http://deeplearning.net/tutorial/code/logistic_sgd.py, в частности
# save the best model
with open('best_model.pkl', 'w') as f:
cPickle.dump(classifier, f)
но то, что я получаю
... загрузка данных ... построение модели ... эпоха обучения 1, мини-пакет 74/74, ошибка проверки 38,333333 % эпоха 1, мини-пакет 74/74, ошибка теста лучшей модели 41,666667 % Трассировка (последний последний вызов): Файл "mlp.py", строка 423, в test_mlp() Файл "mlp.py", строка 406, в test_mlp cPickle.dump(классификатор, f, протокол=cPickle.HIGHEST_PROTOCOL) cPickle.PicklingError: Can't pickle: атрибут поиск встроенный.instancemethod не удалось
Поскольку я столкнулся с этой проблемой и со сверточной сетью, мой вопрос: существует ли общий способ хранения модели в Theano для повторного использования для прогнозирования?
ИЗМЕНИТЬ Как было предложено в комментариях, я использую сейчас
cPickle.dump((classifier.hiddenLayer.params,classifier.logRegressionLayer.params), f)
для экономии и
classifier.hiddenLayer.W = cPickle.load(open('best_model_mlp.pkl'))[0][0]
для установки весов (например) скрытого слоя в классификаторе, определенном как
x = T.matrix('x')
classifier = MLP(
rng=rng,
input=x,
n_in = 28*28,
n_hidden= 500,
n_out=10
)
но когда я вызываю саму функцию
predict_model = theano.function(
inputs=[classifier.input],
outputs=classifier.logRegressionLayer.y_pred,
)
У меня всегда есть [0] в качестве прогноза, даже с хорошо обученной сетью. Я все еще ошибаюсь в настройке или сохранении параметров?