def make_predictions(conf,shot_list,loader): os.environ['THEANO_FLAGS'] = 'device=cpu' #=cpu import theano from keras.utils.generic_utils import Progbar from model_builder import ModelBuilder builder = ModelBuilder(conf) y_prime = [] y_gold = [] disruptive = [] _,model = builder.build_train_test_models() builder.load_model_weights(model) model_save_path = builder.get_latest_save_path() start_time = time.time() pool = mp.Pool() fn = partial(make_single_prediction,builder=builder,loader=loader,model_save_path=model_save_path) print('running in parallel on {} processes'.format(pool._processes)) for (i,(y_p,y,is_disruptive)) in enumerate(pool.imap(fn,shot_list)): # for (i,(y_p,y,is_disruptive)) in enumerate(imap(fn,shot_list)): print('Shot {}/{}'.format(i,len(shot_list))) sys.stdout.flush() y_prime.append(y_p) y_gold.append(y) disruptive.append(is_disruptive) pool.close() pool.join() print('Finished Predictions in {} seconds'.format(time.time()-start_time)) return y_prime,y_gold,disruptive
def make_predictions_gpu(conf,shot_list,loader): os.environ['THEANO_FLAGS'] = 'device=gpu,floatX=float32' #=cpu import theano from keras.utils.generic_utils import Progbar from model_builder import ModelBuilder builder = ModelBuilder(conf) y_prime = [] y_gold = [] disruptive = [] _,model = builder.build_train_test_models() builder.load_model_weights(model) model.reset_states() pbar = Progbar(len(shot_list)) shot_sublists = shot_list.sublists(conf['model']['pred_batch_size'],shuffle=False,equal_size=True) for (i,shot_sublist) in enumerate(shot_sublists): X,y,shot_lengths,disr = loader.load_as_X_y_pred(shot_sublist) #load data and fit on data y_p = model.predict(X, batch_size=conf['model']['pred_batch_size']) model.reset_states() y_p = loader.batch_output_to_array(y_p) y = loader.batch_output_to_array(y) #cut arrays back y_p = [arr[:shot_lengths[j]] for (j,arr) in enumerate(y_p)] y = [arr[:shot_lengths[j]] for (j,arr) in enumerate(y)] # print('Shots {}/{}'.format(i*num_at_once + j*1.0*len(shot_sublist)/len(X_list),len(shot_list_train))) pbar.add(1.0*len(shot_sublist)) loader.verbose=False#True during the first iteration y_prime += y_p y_gold += y disruptive += disr y_prime = y_prime[:len(shot_list)] y_gold = y_gold[:len(shot_list)] disruptive = disruptive[:len(shot_list)] return y_prime,y_gold,disruptive