def eval_and_save(variables_pack_for_eval_and_save, round_num, sess): loss_sum = 0. accuracy_sum = 0. nums = 0 stored_arr = [] model = variables_pack_for_eval_and_save['model'] for src, tgt in variables_pack_for_eval_and_save['test_set']: nums += 1 uids, mids, cats, mid_his, cat_his, mid_mask, target, sl = gn_fn.prepare_data( src, tgt) prob, loss, acc = model.calculate( sess, [uids, mids, cats, mid_his, cat_his, mid_mask, target, sl]) loss_sum += loss accuracy_sum += acc prob_1 = prob[:, 0].tolist() target_1 = target[:, 0].tolist() for p, t in zip(prob_1, target_1): stored_arr.append([p, t]) test_auc = calc_auc(stored_arr) accuracy_sum = accuracy_sum / nums loss_sum = loss_sum / nums if variables_pack_for_eval_and_save['best_auc'] < test_auc: variables_pack_for_eval_and_save['best_auc'] = test_auc variables_pack_for_eval_and_save['best_round'] = round_num variables_pack_for_eval_and_save['saver'].save( sess, variables_pack_for_eval_and_save['CHECKPOINT_DIR']) return test_auc, loss_sum, accuracy_sum
placeholders) sess.run(update_local_vars_op, feed_dict=feed_dict) print('Weights succesfully initialized') sys.stdout.flush() # begin training process print('Begin training') sys.stdout.flush() temp_start_time = time.time() loss_sum = 0.0 accuracy_sum = 0.0 local_iter_cnt = 0 for epoch in range(local_epoch_num): for src, tgt in succinct_train_set: uids, mids, cats, mid_his, cat_his, mid_mask, target, sl = gn_fn.prepare_data( src, tgt) loss, acc = model.train(sess, [ uids, mids, cats, mid_his, cat_his, mid_mask, target, sl, hyperparameters['learning_rate'] ]) loss_sum += loss accuracy_sum += acc local_iter_cnt += 1 print('%d round training over' % round_num) if local_iter_cnt > 0: print( 'time: %d ----> iter: %d ----> train_loss: %.4f ---- train_accuracy: %.4f' % (time.time() - temp_start_time, local_iter_cnt, loss_sum / local_iter_cnt, accuracy_sum / local_iter_cnt)) else: