2016-10-19 7 views
2

Думаю, что я теряю рассудок на этом этапе.Lasagne/Theano, проблемы с загрузкой маринованной модели

Я использую лазанью для небольшой сверточной нейронной сети. Он отлично тренируется, я могу также вычислить ошибку на тренировке и проверке, но я не могу сохранить обучаемую модель на диске. Лучше, я могу сохранить его и загрузить его, но я не могу использовать его для прогнозирования новых данных.

Это то, что я после тренировки

model = {'network': network, 'params': get_all_params(network), 'params_values': get_all_param_values(network)} 
pickle.dump(model, open('models/model_1.pkl', 'wb'), protocol=pickle.HIGHEST_PROTOCOL) 

И это то, что я делаю, чтобы загрузить модель

with open('models/model.pkl', 'rb') as pickle_file: 
    model = pickle.load(pickle_file) 

network = model['network'] 
values = model['params_values'] 

set_all_param_values(network, values) 

T_input = T.tensor4('input', dtype='float32') 
T_target = T.ivector('target') 

predictions = get_output(network, deterministic=True) 

loss = (cross_entropy(predictions, T_target)).mean() 

acc = T.mean(T.eq(T.argmax(predictions, axis=1), T_target), dtype=config.floatX) 

test_fn = function([T_input, T_target], [loss, acc]) 

Я не могу даже пройти реальный вклад Numpy, что я получаю эту ошибку

theano.compile.function_module.UnusedInputError: theano.function was asked to create a 
function computing outputs given certain inputs, but the provided input variable at index 0 
is not part of the computational graph needed to compute the outputs: input. 
To make this error into a warning, you can pass the parameter 
on_unused_input='warn' to theano.function. To disable it completely, use 
on_unused_input='ignore'. 

Тогда я попытался установить параметр on_unused_input = 'warn', и это результат

theano.gof.fg.MissingInputError: An input of the graph, used to compute (..) 
was not provided and not given a value.Use the Theano flag 
exception_verbosity='high',for more information on this error. 
+0

Я думаю, что вы забыли поставить T_input в сети – malioboro

+0

@malioboro как сеть (T_input)? но сеть объектов уже должна быть установлена ​​для ввода этого типа. Может быть, я должен попытаться запустить новую сеть и просто установить значения параметров. Я попробую это завтра. – user1384636

ответ

0

Проблема заключается в том, что ваш T_input не привязан к входному слою и, следовательно, Theano не может скомпилировать

T_input = lasagne.layers.get_all_layers(network)[0].input_var 
+0

lasagne.layers.get_all_layers (network) [0] .input_var –