J'essaie DNN-RNN sur un jeu de données texte. C'est une simple donnée fictive et je pense que le code peut être utilisé avec la plupart des données textuelles. Cependant, je reçois une erreur lorsque j'essaie de charger le modèle entraîné et ensuite le recycler. S'il vous plaît dites-moi si je le fais mal.Comment charger et réapprovisionner le modèle tflean
def convert_docs(documents,no_class=2,MAX_DOCUMENT_LENGTH=200):
'''Takes list of docs and associated clas list as input.
Prepares it for the tflearn library. documents should be a list of strings and
clas should be a numbered list of classes encoded into 0,1,2 etc.
no_classes is the number of classes that are going to be used in the model
this is defaulted to 2'''
if MAX_DOCUMENT_LENGTH is None:
list_docs = []
for x in documents:
list_docs.append(x.split())
MAX_DOCUMENT_LENGTH = max(len(l) for l in list_docs)
print(MAX_DOCUMENT_LENGTH)
else:
MAX_DOCUMENT_LENGTH=MAX_DOCUMENT_LENGTH
vocab_processor = VocabularyProcessor(MAX_DOCUMENT_LENGTH,min_frequency=5,vocabulary=None)
data = np.array(list(vocab_processor.fit_transform(documents)))
n_words = len(vocab_processor.vocabulary_)
données de retour, vocab_processor, n_words, MAX_DOCUMENT_LENGTH
Ceci est pour convertir une liste de texte docs dans le format requis
def model_RNN(MAX_DOCUMENT_LENGTH,n_words):
net = input_data(shape=[None, MAX_DOCUMENT_LENGTH])
net = embedding(net, input_dim=n_words, output_dim=128)
net = bidirectional_rnn(net, BasicLSTMCell(128), BasicLSTMCell(128))
net = dropout(net, 0.5)
net = fully_connected(net, 2, activation='softmax')
net = regression(net, optimizer='adam', loss='categorical_crossentropy')
model = tflearn.DNN(net, clip_gradients=0., tensorboard_verbose=2)
return model
Ici, nous initialize le modèle RNN
def classify_DNN(data,clas,model):
from sklearn.cross_validation import StratifiedKFold
folds = 10 #number of folds for the cv
skf = StratifiedKFold(n_folds=folds,y=clas)
fold = 1
cms = np.array([[0,0],[0,0]])
accs = []
aucs=[]
for train_index, test_index in skf:
X_train, X_test = data[train_index], data[test_index]
y_train, y_test = clas[train_index], clas[test_index]
trainy= to_categorical(y_train, nb_classes=2)
model.fit(X_train, trainy, n_epoch = 10, shuffle=True)
prediction = model.predict(X_test)
pred=np.argmax(prediction,axis=1)
acc = accuracy_score(pred, y_test)
cm = confusion_matrix(y_test,pred)
fpr, tpr, thresholds = metrics.roc_curve(y_test, pred)
print('Test Accuracy for fold {} : {}'.format(fold,round((acc*100),2)))
au = metrics.auc(fpr, tpr)
#au=roc_auc_score(testY, pred)
print('AUC for fold {} : {}'.format(fold,round((au*100),2)))
fold +=1
cms += cm
accs.append(acc)
aucs.append(au)
#print('CV test accuracy: {}\n{}'.format(round((np.mean(accs)*100),2),cms))
#print('\nCV AUC: {}'.format(round(np.mean(aucs)*100),2))
print('\nCV accuracy: %.3f +/- %.3f' % (round((np.mean(accs)*100),2),round((np.std(accs)*100),2)))
print('\nCV ROC AUC: %.3f +/- %.3f' % (round((np.mean(aucs)*100),2),round((np.std(aucs)*100),2)))
return model, round(np.mean(accs)*100,2), round(np.mean(aucs)*100,2)
Ceci est pour la formation du modèle .. Je sais que cela pourrait ne pas être la meilleure façon de le faire, mais ce fut une expérience ..
def pred_user_dnn(user_transformed, clf, y=None):
'''
Used for predicting the class of the user string given the transformed user input and the pretrained classifier
Arguments:
user_transformed= the transformed doc using the one used on the training data.. Must have same dimension as the training data
clf= classifier pre trained on the training data of the one returned from cros_val()
y= the training labels
returns:
string- Yes if the predicted label is 0
No is the predicted label is 1
'''
usr_p = clf.predict(user_transformed)
usr_p= np.argmax(usr_p,1)
print('\nUser class'+str(usr_p))
for x in usr_p:
if x==0:
print("Case recovery eligibility is: Yes")
return 'Yes'
elif x==1:
print("Case recovery eligibility is: No")
return 'No'
Cette fonction prédit les nouvelles chaînes
tf.reset_default_graph()
data,vocab_processor, n_words, MAX_DOCUMENT_LENGTH = convert_docs(documents,no_class=2,MAX_DOCUMENT_LENGTH=200)
model = model_RNN(MAX_DOCUMENT_LENGTH,n_words)
clf, acc, roc_auc =classify_DNN(data,clas,model)
final_name = 'LSTM'.lower()+'_'+now+'.clf'
clf.save(os.path.join(trained,final_name))
Ceci est pour sauver le modèle formé
tf.reset_default_graph()
model_name=model_name.lower()
data,vocab_processor, n_words, MAX_DOCUMENT_LENGTH = convert_docs(documents,no_class=2,MAX_DOCUMENT_LENGTH=200)
model = model_RNN(MAX_DOCUMENT_LENGTH,n_words)
path_clf= #path where the model is saved
model.load(os.path.join(trained,path_clf))
user_transformed = np.array(list(vocab_processor.transform(clean_user_list)))
#using it for prediction
user_transformed =pad_sequences(sequences=user_transformed,maxlen=MAX_DOCUMENT_LENGTH, value=0.)
result = pred_user_dnn(user_transformed, model)
Et là, je suis le chargement de la enregistré le modèle et j'obtiens cette erreur.
model.load(os.path.join(trained,path_clf))
Traceback (most recent call last):
File "<ipython-input-28-d4cf3784bb15>", line 1, in <module>
model.load(os.path.join(trained,path_clf))
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tflearn\models\dnn.py", line 260, in load
self.trainer.restore(model_file, weights_only, **optargs)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tflearn\helpers\trainer.py", line 449, in restore
self.restorer.restore(self.session, model_file)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 1388, in restore
{self.saver_def.filename_tensor_name: save_path})
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 766, in run
run_metadata_ptr)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 964, in _run
feed_dict_string, options, run_metadata)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1014, in _do_run
target_list, options, run_metadata)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1034, in _do_call
raise type(e)(node_def, op, message)
NotFoundError: Key val_loss_2 not found in checkpoint
[[Node: save_5/RestoreV2_122 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_save_5/Const_0, save_5/RestoreV2_122/tensor_names, save_5/RestoreV2_122/shape_and_slices)]]
Caused by op 'save_5/RestoreV2_122', defined at:
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\spyder\utils\ipython\start_kernel.py", line 223, in <module>
main()
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\spyder\utils\ipython\start_kernel.py", line 219, in main
kernel.start()
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\ipykernel\kernelapp.py", line 474, in start
ioloop.IOLoop.instance().start()
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\zmq\eventloop\ioloop.py", line 162, in start
super(ZMQIOLoop, self).start()
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tornado\ioloop.py", line 887, in start
handler_func(fd_obj, events)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tornado\stack_context.py", line 275, in null_wrapper
return fn(*args, **kwargs)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\zmq\eventloop\zmqstream.py", line 440, in _handle_events
self._handle_recv()
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\zmq\eventloop\zmqstream.py", line 472, in _handle_recv
self._run_callback(callback, msg)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\zmq\eventloop\zmqstream.py", line 414, in _run_callback
callback(*args, **kwargs)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tornado\stack_context.py", line 275, in null_wrapper
return fn(*args, **kwargs)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 276, in dispatcher
return self.dispatch_shell(stream, msg)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 228, in dispatch_shell
handler(stream, idents, msg)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 390, in execute_request
user_expressions, allow_stdin)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\ipykernel\ipkernel.py", line 196, in do_execute
res = shell.run_cell(code, store_history=store_history, silent=silent)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\ipykernel\zmqshell.py", line 501, in run_cell
return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2717, in run_cell
interactivity=interactivity, compiler=compiler, result=result)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2821, in run_ast_nodes
if self.run_code(code, result):
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2881, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-18-395d2873044e>", line 2, in <module>
model = model_bi_LSTM(MAX_DOCUMENT_LENGTH,n_words)
File "C:\Users\kkothari\Desktop\text_mining\deep_learning.py", line 112, in model_bi_LSTM
model = tflearn.DNN(net, clip_gradients=0., tensorboard_verbose=2)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tflearn\models\dnn.py", line 63, in __init__
best_val_accuracy=best_val_accuracy)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tflearn\helpers\trainer.py", line 145, in __init__
keep_checkpoint_every_n_hours=keep_checkpoint_every_n_hours)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 1000, in __init__
self.build()
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 1030, in build
restore_sequentially=self._restore_sequentially)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 624, in build
restore_sequentially, reshape)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 361, in _AddRestoreOps
tensors = self.restore_op(filename_tensor, saveable, preferred_shard)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 200, in restore_op
[spec.tensor.dtype])[0])
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_io_ops.py", line 441, in restore_v2
dtypes=dtypes, name=name)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 759, in apply_op
op_def=op_def)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2240, in create_op
original_op=self._default_original_op, op_def=op_def)
File "C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 1128, in __init__
self._traceback = _extract_stack()
NotFoundError (see above for traceback): Key val_loss_2 not found in checkpoint
[[Node: save_5/RestoreV2_122 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_save_5/Const_0, save_5/RestoreV2_122/tensor_names, save_5/RestoreV2_122/shape_and_slices)]]