if cost_avg < decay_cost: decay_cost = cost_avg decay_epoch = epoch rnn.save(args.model_dir, "decay_") #XXX: estimate training model if epoch % valid_freq == 0: y_relations = [] for i, (x, y, words) in enumerate(zip(x_train, y_train, train_words_list)): y_pred = rnn.predict(x) # extract relations from current document y_relations.extend(extract_relations(y_pred, tag_to_j, words)) # evaluate all relations precision, recall, f1 = scorer.evaluate_relation(train_relations_list, y_relations) log.info(" train precision {:7.4f} recall {:7.4f}, f1 {:7.4f}".format(precision, recall, f1)) # validate model if epoch % valid_freq == 0: y_relations = [] for i, (x, y, words) in enumerate(zip(x_valid, y_valid, valid_words_list)): y_pred = rnn.predict(x) # extract relations from current document y_relations.extend(extract_relations(y_pred, tag_to_j, words)) # evaluate all relations precision, recall, f1 = scorer.evaluate_relation(valid_relations_list, y_relations) log.info(" valid precision {:7.4f} recall {:7.4f}, f1 {:7.4f} (best {:10.8f}) {}".format(precision, recall, f1, (f1 if f1 > best_f1 else best_f1), ("++" if f1 > best_f1 else " "))) if f1 > best_f1: # save best model
decay_epoch = epoch rnn.save(args.model_dir, "decay_") # validate model if epoch % valid_freq == 0: y_relations = [] for i, (x, y, words) in enumerate(zip(x_valid, y_valid, valid_words_list)): y_pred = rnn.predict(x) # extract relations from current document y_relations.extend(extract_relations(y_pred, tag_to_j, words)) # evaluate all relations precision, recall, f1 = scorer.evaluate_relation( valid_relations_list, y_relations) log.info( "valid set precision {:.2f}, recall {:.2f}, f1 {:.2f}{} (best {})" .format(precision, recall, f1, (" +" if f1 > best_f1 else " "), best_f1)) if f1 > best_f1: # save best model best_f1 = f1 best_epoch = epoch #best_rnn = copy.deepcopy(rnn) rnn.save(args.model_dir, "f1_") if f1 >= 1.: # perfect print " WOOHOO!!!" break # learning rate decay if no improvement after some epochs if epoch - decay_epoch >= decay_after:
#y = rnn.predict(train_x) y_relations = [] for relation in extract_relations(doc_id, doc, y, tag_to_j, all_tsenses): y_relations.append(relation) # check relations validator.check_type(relation) validator.check_sense(relation) validator.check_args(relation) validator.check_connective(relation) # evaluate relations try: precision, recall, f1 = scorer.evaluate_relation( train_y_data[doc_id], y_relations) print "evaluate train set precision {0:.2f}, recall {1:.2f}, f1 {2:.2f}".format( precision, recall, f1) except ZeroDivisionError: precision, recall, f1 = 0.0, 0.0, 0.0 if f1 == 1.0: print "WOOHOO!!!" break # learning rate decay if no improvement after some epochs if epoch - best_epoch >= decay_after: learn_rate *= decay_rate if epoch > epochs or learn_rate < decay_min: break epoch += 1
# extract relations #y = rnn.predict(train_x) y_relations = [] for relation in extract_relations(doc_id, doc, y, tag_to_j, all_tsenses): y_relations.append(relation) # check relations validator.check_type(relation) validator.check_sense(relation) validator.check_args(relation) validator.check_connective(relation) # evaluate relations try: precision, recall, f1 = scorer.evaluate_relation(train_y_data[doc_id], y_relations) print "evaluate train set precision {0:.2f}, recall {1:.2f}, f1 {2:.2f}".format(precision, recall, f1) except ZeroDivisionError: precision, recall, f1 = 0.0, 0.0, 0.0 if f1 == 1.0: print "WOOHOO!!!" break # learning rate decay if no improvement after some epochs if epoch - best_epoch >= decay_after: learn_rate *= decay_rate if epoch > epochs or learn_rate < decay_min: break epoch += 1