nonlinearity=args.act, seed=args.seed, debug=False) total_params = sum([np.prod(x[1].shape) for x in model.params.items()]) print('RNN type: ' + args.rnn + " Grammar: " + args.data + " Seed: " + str(args.seed)) print('Model total parameters: {}'.format(total_params)) try: if args.continue_train: model.params, h_init = load_params(params_file, hinit_file, model.params) model.reload_hidden(h_init, args.batch) model.init_tparams() model.build_model() else: model.init_hidden(args.batch, args.seed) save_hinit(model.h_init[0], hinit_file) model.build_model() model_test.reload_hidden(model.h_init[0], args.test_batch) model_test.build_model() # train the model if args.curriculum: model = curriculum_train(model=model, x=train_x, m=train_m, y=train_y, x_v=val_x,
def train(args): positive_data_dir = args.positive_data_dir negative_data_dir = args.negative_data_dir emb_size = args.emb_size hidden_size = args.hidden_size dropout = args.dropout lr = args.learning_rate timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") result_dir = 'wiki_' + timestamp result_dir = os.path.join(args.result_dir, result_dir) if not os.path.exists(result_dir): os.makedirs(result_dir) # Output to Stream handler1 = logging.StreamHandler() handler1.setLevel(logging.DEBUG) handler1.setFormatter( logging.Formatter("%(asctime)s %(levelname)8s %(message)s")) # Output to log file handler2 = logging.FileHandler( filename=os.path.join(result_dir, "log_{}.log".format(timestamp))) handler2.setLevel(logging.DEBUG) handler2.setFormatter( logging.Formatter("%(asctime)s %(levelname)8s %(message)s")) logger = logging.getLogger("StyleLearning.wiki") logger.addHandler(handler1) logger.addHandler(handler2) logger.info("results data will be saved at {}".format(result_dir)) positive_data_path = [ p for p in glob.glob(os.path.join(positive_data_dir, "**/*"), recursive=True) if os.path.isfile(p) ] negative_data_path = [ p for p in glob.glob(os.path.join(negative_data_dir, "**/*"), recursive=True) if os.path.isfile(p) ] positive_data_path.sort() negative_data_path.sort() epochs = args.epochs positive_data_path = positive_data_path[:300] negative_data_path = negative_data_path[:300] batch_size = 32 T = 32 data_gen = DataForGenerator(batch_size=batch_size, T=T) for d in positive_data_path: data_gen.load_sentenceid_data(d, label=True) for d in negative_data_path: data_gen.load_sentenceid_data(d, label=False) logger.info("Building vocablary...") data_gen.load_vocab('./vocab.csv', vocab_size=50000) data_gen.make_train_and_test_data() test_data = data_gen.get_test_data() vocab_size = len(data_gen.vocab.word2id) logger.info("Vocab size: ", vocab_size) gen = data_gen.generate_training_data() model = RNNModel(batch_size=batch_size, vocab_size=vocab_size, emb_size=emb_size, hidden_size=hidden_size, T=T, dropout=dropout, lr=lr, model_path=result_dir) model.build_model(optimizer=Adam(lr), loss='binary_crossentropy', metrics=['accuracy']) steps_per_epoch = len(data_gen) display_params(logger, \ {"batch_size": batch_size, "padding_size":T, "emb_size":emb_size, "hidden_size":128, "dropout":dropout, "learning_rate":lr}) model.fit_generator(generator=gen, epochs=epochs, steps_per_epoch=steps_per_epoch, validation_data=test_data)