Пример #1
0
                      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,
Пример #2
0
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)