def train(): from data_trans import process process() from data_loader import train_data, SpoSearcher, dev_data, DataGenerator init_keras_config() train_model, subject_model, object_model = model() EMAer = ExponentialMovingAverage(train_model) EMAer.inject() spoer = SpoSearcher(train_data) train_D = DataGenerator(train_data) evaluator = Evaluate(train_model, EMAer=EMAer, dev_data=dev_data, spoer=spoer, subject_model=subject_model, object_model=object_model) train_model.fit_generator(train_D.__iter__(), steps_per_epoch=len(train_D), epochs=120, callbacks=[evaluator])
def train_on_train_test_split(): train_config = get_config() bert_config = get_bert_config(train_config) cased = train_config.BERT_DIR.split('/')[-1].startswith('cased') tokenizer = FullTokenizer(bert_config.vocab, do_lower_case=cased) with tf.device('/cpu:0'): model = get_bert_base_model(bert_config) text, label = load_data(os.path.join(train_config.DATA_DIR, 'train.csv')) train_text, val_text, train_label, val_label = train_test_split( text, label, test_size=0.055, random_state=59) train_gen = DataGenerator(train_text, train_label, tokenizer, batch_size=32) val_text = tokenize_examples(val_text, tokenizer, max_len=512) val_text = seq_padding(val_text) logger = Logger(model=model, val_text=val_text, val_label=(val_label > 0.5).astype(np.float32)) # OPTIMIZER PARAMs lr = 2e-5 weight_decay = 0.01 bsz = 32 decay_steps = 1 * len(train_gen) warmup_steps = int(0.1 * decay_steps) optimizer = AdamWarmup( decay_steps=decay_steps, warmup_steps=warmup_steps, lr=lr, weight_decay=weight_decay, ) parallel_model = multi_gpu_model(model, gpus=4) parallel_model.compile(loss='binary_crossentropy', optimizer=optimizer) parallel_model.fit_generator(train_gen.__iter__(), steps_per_epoch=len(train_gen), epochs=1, callbacks=[logger], max_queue_size=100)