else: data = NormalizingReplayOnlineBatcher(args.datafile, args.mb, skipheader=args.skipheader, refresh_ratio=args.refresh_ratio, ratio=tuple(args.ratio), pool_size=args.pool_size, delimiter=args.delimiter, alpha=args.alpha,datastart_index=datastart_index) feature_spec = make_feature_spec(dataspecs) x, ph_dict = join_multivariate_inputs(feature_spec, dataspecs, args.embedding_ratio, args.max_embed, args.min_embed) h = dnn(x, layers=[args.hiddensize for i in range(args.numlayers)], act=activation, keep_prob=args.keep_prob, norm=normalizers[args.norm], scale_range=args.initrange) loss_spec = make_loss_spec(dataspecs, mvn) loss_matrix = multivariate_loss(h, loss_spec, ph_dict, variance_floor=args.variance_floor) loss_vector = tf.reduce_sum(loss_matrix, reduction_indices=1) # is MB x 1 loss = tf.reduce_mean(loss_vector) # is scalar loss_names = get_multivariate_loss_names(loss_spec) eval_tensors = [loss, loss_vector, loss_matrix] model = ModelRunner(loss, ph_dict, learnrate=args.learnrate, opt='adam', debug=args.debug, decay_rate=args.decay_rate, decay_steps=args.decay_steps) raw_batch = data.next_batch() current_loss = sys.float_info.max not_early_stop = EarlyStop(args.maxbadcount) loss_feats = [triple[0] for triple in loss_spec] # training loop continue_training = not_early_stop(raw_batch, current_loss) while continue_training: # mat is not None and self.badcount < self.badlimit and loss != inf, nan: datadict = split_batch(raw_batch, dataspecs) targets = {'target_' + name: datadict[name] for name in loss_feats}
initial_state=initial_state, layers=args.layers, sequence_lengths=None, state_index=None) # evaluate on selected outputs from rnn eval_vecs = [tf.placeholder(tf.int32, [None], name='eval_%s' % i) for i in range(args.num_steps - args.use_next_time_step)] hidden_states = [tf.nn.embedding_lookup(hidden_state, state_indices) for hidden_state, state_indices in zip(hidden_states, eval_vecs)] hidden_matrix = tf.concat(hidden_states, 0) loss_spec = make_loss_spec(dataspecs, mvn) loss_matrix = multivariate_loss(hidden_matrix, loss_spec, ph_dict) loss_vector = tf.reduce_sum(loss_matrix, reduction_indices=1) # is MB x 1 loss = tf.reduce_mean(loss_vector) # is scalar loss_names = get_multivariate_loss_names(loss_spec) eval_tensors = [loss, loss_vector, loss_matrix] + np.array(states).flatten().tolist() # Create an object to train on this graph initial_state = np.array(initial_state).flatten().tolist() ph_dict.update({'initial_state': initial_state, 'eval_indices': eval_vecs}) trainer = ModelRunner(loss, ph_dict, args.learnrate, debug=args.debug) data = StateTrackingBatcher(args.datafile, dataspecs, batchsize=args.mb, num_steps=args.num_steps, layers=args.layers,
def run_dnn_test(args): data_file, data_spec_file, outdir = args """Run DNN model on data file given parameters.""" nl = config.dnn.num_layers hs = config.dnn.hidden_size # io and state print('running DNN with nl={}, hs={}'.format(nl, hs)) start = time.time() dataspecs = json.load(open(data_spec_file, 'r')) feature_spec = make_feature_spec(dataspecs) datastart_index = dataspecs['counts']['index'][0] normalizers = {'none': None, 'layer': layer_norm, 'batch': batch_normalize} tf.set_random_seed(config.state.random_seed) data = OnlineBatcher(data_file, config.dnn.batch_size, skipheader=True, delimiter=' ') # activation if config.dnn.activation == 'tanh': activation = tf.tanh elif config.dnn.activation == 'relu': activation = tf.nn.relu else: raise ValueError('Activation must be "relu", or "tanh"') # mvn if config.dnn.dist == "ident": mvn = eyed_mvn_loss elif config.dnn.dist == "diag": mvn = diag_mvn_loss elif config.dnn.dist == "full": mvn = full_mvn_loss raise ValueError('dnn.dist must be "ident", "diag", or "full"') # setup tf model x, ph_dict = join_multivariate_inputs(feature_spec, dataspecs, 0.75, 1000, 2) h = dnn(x, layers=[hs for i in range(nl)], act=activation, keep_prob=None, norm=normalizers[config.dnn.normalizer], scale_range=1.0) loss_spec = make_loss_spec(dataspecs, mvn) loss_matrix = multivariate_loss(h, loss_spec, ph_dict, variance_floor=0.01) loss_vector = tf.reduce_sum(loss_matrix, reduction_indices=1) # is MB x 1 loss = tf.reduce_mean(loss_vector) # is scalar loss_names = get_multivariate_loss_names(loss_spec) eval_tensors = [loss, loss_vector, loss_matrix] model = ModelRunner(loss, ph_dict, learnrate=config.dnn.lr, opt='adam', debug=config.dnn.debug, decay_rate=1.0, decay_steps=20) raw_batch = data.next_batch() current_loss = sys.float_info.max not_early_stop = EarlyStop(20) loss_feats = [triple[0] for triple in loss_spec] # start training start_time = time.time() continue_training = not_early_stop(raw_batch, current_loss) # mat is not None and self.badcount < self.badlimit and loss != inf, nan: rst = [] while continue_training: datadict = split_batch(raw_batch, dataspecs) targets = {'target_' + name: datadict[name] for name in loss_feats} datadict.update(targets) current_loss, pointloss, contrib = model.eval(datadict, eval_tensors) model.train_step(datadict) for user, day, score, red in zip( datadict['user'].flatten().tolist(), datadict['time'].flatten().tolist(), pointloss.flatten().tolist(), datadict['redteam'].flatten().tolist()): rst.append((user, int(day), score, red)) if data.index % 10000 == 1: print('index: %s loss: %.4f' % (data.index, current_loss)) sys.stdout.flush() raw_batch = data.next_batch() continue_training = not_early_stop(raw_batch, current_loss) if continue_training < 0: break # save the (user, day, score, red). train_rst, test_rst = split_train_test(rst) outfile1, outfile2 = FileName.get_dnn_rst_name() save_rst(train_rst, outfile1) save_rst(test_rst, outfile2) print('') eval_cr(test_rst, 'dnn') dt = time.time() - start print("run_dnn_test Done. Elapsed time is %.2f seconds." % dt)