model = TextCNN(config) model.build() sess_config = tf.ConfigProto() sess_config.gpu_options.allow_growth = True sess_config.gpu_options.per_process_gpu_memory_fraction = 0.9 sess = tf.Session(config=sess_config) init = tf.global_variables_initializer() sess.run(init) ckpt = tf.train.get_checkpoint_state(checkpoint_dir) if ckpt and tf.train.get_checkpoint_state(checkpoint_dir): model.restore(sess, ckpt.model_checkpoint_path) else: print("no checkpoint saved") exit() test_data = list(zip(test_docs, seq_len, test_labels)) batches = data_util.batch_loader(test_data, 32) total_preds = [] for batch in batches: batch_docs, batch_seq_len, batch_labels = zip(*batch) preds = model.predict(sess, batch_docs, batch_seq_len) total_preds = np.concatenate([total_preds, preds], axis=0) test_acc = np.mean(total_preds == test_labels) rmse = np.mean(np.square(total_preds - test_labels), axis=0) rmse = np.sqrt(rmse) print("test accuracy : {}".format(test_acc)) print(rmse) reviews = open(test_data_file, "r", encoding="utf-8").readlines() reviews = list(map(lambda x: x.strip().replace("</s>", ""), reviews)) result = np.column_stack((total_preds, test_labels, reviews)) with open(result_file, "w", encoding="utf-8") as f: fw = csv.writer(f)
model.embedding_matrix.assign(pretrained_embedding) del pretrained_embedding ckpt = tf.train.get_checkpoint_state(checkpoint_dir) if ckpt and tf.train.checkpoint_exists(ckpt.model_checkpoint_path): print("Reload model paramters") model.restore(sess, ckpt.model_checkpoint_path) else: if not os.path.exists(checkpoint_dir): os.makedirs(checkpoint_dir) print("create new model parameter") sess.run(tf.global_variables_initializer()) step = None best_loss = 1e10 no_improv = 0 for epoch in range(num_epochs): batches = batch_loader(list(zip(docs, sums)), batch_size) dev_batches = batch_loader(list(zip(dev_docs, dev_sums)), batch_size) for batch in batches: batch_source, batch_target = zip(*batch) batch_encoder_input, batch_encoder_len, \ batch_decoder_input, batch_decoder_len = \ make_array_format(batch_source, batch_target) batch_loss, summary_op = model.train( sess, encoder_inputs=batch_encoder_input, encoder_length=batch_encoder_len, decoder_inputs=batch_decoder_input, decoder_length=batch_decoder_len, dropout=dropout) step = model.global_step.eval(sess) print("epoch : {} step : {}, loss : {}".format(
sess.run(init) ckpt = tf.train.get_checkpoint_state(checkpoint_dir) if ckpt and tf.train.checkpoint_exists(ckpt.model_checkpoint_path): print("reload model") model.restore(sess, ckpt.model_checkpoint_path) else: print("start from scratch") if not os.path.exists(checkpoint_dir): os.makedirs(checkpoint_dir) print("start training") best_acc = 0 for i in range(config.num_epochs): epoch = i + 1 train_data = list(zip(train_docs, train_seq_len, train_labels)) batches = data_util.batch_loader(train_data, batch_size, shuffle=True) for batch in batches: batch_docs, batch_seq_len, batch_labels = zip(*batch) step, loss, acc, rmse = model.train(sess, batch_docs, batch_seq_len, batch_labels, config.dropout) print("epoch: {}, loss: {}, acc: {}".format(epoch, loss, acc)) del train_data dev_data = list(zip(dev_docs, dev_seq_len, dev_labels)) dev_batches = data_util.batch_loader(dev_data, batch_size) total_preds = [] for dev_batch in dev_batches: batch_docs, batch_seq_len, batch_labels = zip(*dev_batch) preds = model.predict(sess, batch_docs, batch_seq_len, dropout=1.0) total_preds = np.concatenate([total_preds, preds], axis=0) dev_acc = np.mean(total_preds == dev_labels) print("dev accuracy : {}".format(dev_acc))
state_size=state_size, decoder_vocab_size=max_vocab_size, filter_width=filter_width, zoneout=zoneout, attention_hidden_size=attention_hidden_size, mode=mode, beam_depth=beam_depth, learning_rate=learning_rate, max_iter=summary_len) ckpt = tf.train.get_checkpoint_state(checkpoint_dir) if ckpt and tf.train.checkpoint_exists(ckpt.model_checkpoint_path): print("Reload model parameters") model.restore(sess, ckpt.model_checkpoint_path) else: exit() batches = data_util.batch_loader(docs, batch_size) fw = open(summary_file, "w", encoding="utf-8") for idx, batch in enumerate(batches): batch_encoder_input, batch_encoder_len = data_util.make_array_format( batch) # if BeamSearchDecoder : [batch, max_time_step, beam_Depth] batch_summaries = model.predict(sess, batch_encoder_input, batch_encoder_len) # iterate every example, get best beam search result for summary in batch_summaries: best_summary = summary[:, 0] # convert indices to corresponding tokens summary_tokens = data_util.map_idx2tok(best_summary, vocab) # remove EOS token try: stop_index = summary_tokens.index(data_util.ID_EOS)
def main(): config = Config() vocab = Vocab(config.dict_file) tq, tc, q, c, a_s, a_t = load_data(config.train_query_file, config.train_context_file, config.train_tables_file, config.train_answer_file, vocab, config.debug) #dev_q, dev_c, dev_s, dev_a_s, dev_a_t = load_data(config.dev_query_file, config.dev_context_file, config.dev_tables_file, config.dev_answer_file, vocab, config.debug) max_q_len = max_len(q) max_c_len = max_len(c) max_a_len = max_len(a_s) train_data = list(zip(tq, tc, q, c, a_s, a_t)) #dev_data = list(zip(dev_q, dev_c, dev_s, dev_a_s, dev_a_t)) wiki = Wiki(config) wiki.build_model() best_score = 0 print("start") for i in range(config.num_epochs): epoch = i + 1 print(epoch) batches = batch_loader(train_data, config.batch_size, shuffle=False) for batch in batches: batch_tq, batch_tc, batch_q, batch_c, batch_a_s, batch_a_t = zip( *batch) question_lengths, padded_q = zero_padding(batch_q, max_q_len) context_lengths, padded_c = zero_padding(batch_c, max_c_len) answer_start_lengths, padded_a_s = zero_padding( batch_a_s, max_a_len) # loss, acc, pred, step = wiki.train(padded_q, question_lengths, padded_c, context_lengths, # padded_a_s, answer_start_lengths, config.dropout) loss, step = wiki.train(padded_q, question_lengths, padded_c, context_lengths, padded_a_s, batch_a_t, answer_start_lengths, max_q_len, max_c_len, max_a_len, config.dropout) # train_batch_acc, train_batch_em, train_batch_loss = wiki.eval(padded_q, question_lengths, padded_c, # context_lengths, # padded_s, sequence_lengths, # sentence_lengths, batch_s_idx, # batch_ans, batch_spans) train_batch_loss = wiki.eval(padded_q, question_lengths, padded_c, context_lengths, padded_a_s, batch_a_t, answer_start_lengths, max_q_len, max_c_len, max_a_len, config.dropout) print(loss) print(train_batch_loss) print("done") # dev_em = np.mean(total_em) # dev_acc = np.mean(total_acc) # dev_loss = np.mean(total_loss) # wiki.write_summary(dev_acc, dev_em, dev_loss, mode="dev") # wiki.write_summary(train_batch_acc, train_batch_em, train_batch_loss, mode="train") # print("after %d step, dev_em:%.2f" % (step, dev_em)) # if dev_em > best_score: # best_score = dev_em # print("new score! em: %.2f, acc:%.2f" % (dev_em, dev_acc)) # wiki.save_session(config.dir_model) print("end")