2016-10-19 1 views
2

Je pense que je perds mon esprit à ce moment. J'utilise Lasagne pour un petit réseau de neurones convolutionnels. Il s'entraîne parfaitement, je peux calculer l'erreur sur l'ensemble de formation et de validation, mais je ne peux pas enregistrer le modèle formé sur le disque. Mieux, je peux l'enregistrer et le charger, mais je ne peux pas l'utiliser pour prédire de nouvelles données.Lasagne/Théano, problèmes de chargement modèle décapés

C'est ce que je fais après la formation

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) 

Et c'est ce que je fais pour charger le modèle

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]) 

Je ne peux même passer la vraie entrée numpy, que je reçois cette erreur

J'ai essayé de définir le paramètre on_unused_input = 'warn' alors, et ceci est le résultat
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

Je pense que vous avez oublié de mettre T_input dans le réseau – malioboro

+0

@malioboro comme réseau (T_input)? mais le réseau d'objets doit déjà être défini pour une entrée de ce type. Peut-être que je devrais essayer d'initier un nouveau réseau et juste définir les valeurs des paramètres. Je vais essayer ça demain. – user1384636

Répondre

0

Le problème est que votre T_input n'est pas liée à la couche d'entrée et donc Théano ne peut pas compiler

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

lasagne.layers.get_all_layers (réseau) [0] .input_var –