def predict(): with open(map_path, "rb") as f: word_to_id, cat_to_id, seq_length, num_classes = pickle.load(f) id_to_cat = {v: k for k, v in cat_to_id.items()} config = TRNNConfig() config.num_classes = num_classes config.vocab_size = len(word_to_id) model = TextRNN(config) session = tf.Session() session.run(tf.global_variables_initializer()) saver = tf.train.Saver() saver.restore(sess=session, save_path=save_path) # 读取保存的模型 while True: line = input("请输入测试句子:") data_id = [[ word_to_id[x] for x in list(native_content(line)) if x in word_to_id ]] x_pad = kr.preprocessing.sequence.pad_sequences(data_id, seq_length) y_pred_cls = session.run(model.y_pred_cls, feed_dict={ model.input_x: x_pad, model.keep_prob: 1.0 }) print('sentence : {}, prdict intent : {}'.format( line, id_to_cat[y_pred_cls[0]])) a = 1
# 评估 print("Precision, Recall and F1-Score...") print(metrics.classification_report(y_test_cls, y_pred_cls, target_names=categories)) # 混淆矩阵 print("Confusion Matrix...") cm = metrics.confusion_matrix(y_test_cls, y_pred_cls) print(cm) time_dif = get_time_dif(start_time) print("Time usage:", time_dif) if __name__ == '__main__': if len(sys.argv) != 2 or sys.argv[1] not in ['train', 'test']: raise ValueError("""usage: python run_rnn.py [train / test]""") print('Configuring RNN model...') config = TRNNConfig() if not os.path.exists(vocab_dir): # 如果不存在词汇表,重建 build_vocab(train_dir, vocab_dir, config.vocab_size) categories, cat_to_id = read_category() words, word_to_id = read_vocab(vocab_dir) config.vocab_size = len(words) model = TextRNN(config) if sys.argv[1] == 'train': train() else: test()
for f in F1: print('\t'.join(['%0.1f'%f[0],str(f[2]),str(f[3]),str(f[4]),str(f[5])])) return auc,F1 if __name__ == '__main__': tf.reset_default_graph() base_dir = sys.argv[1] save_dir = sys.argv[2] ckpt_dir = sys.argv[3] train_dir = os.path.join(base_dir, 'train.txt') test_dir = os.path.join(base_dir, 'test.txt') val_dir = os.path.join(base_dir, 'val.txt') vocab_dir = os.path.join(base_dir, 'vocab.txt') predict_dir = os.path.join(base_dir, 'predict.txt') save_path = os.path.join(save_dir, 'best_validation') # 最佳验证结果保存路径 if len(sys.argv)>4: option = sys.argv[4] else: option = 'train' print('Configuring RNN model...') config = TRNNConfig() tokenizer = Tokenizer(vocab_dir) config.vocab_size = len(tokenizer.vocab) model = TextRNN(config) print('参数总量:%d'%np.sum([np.prod(v.get_shape().as_list()) for v in tf.trainable_variables()])) if option == 'train': iter = batch_iter(train_dir, tokenizer, epochs=config.num_epochs) iter_test = batch_iter_test(val_dir, tokenizer) train() else: test()