def train(self, train_data, valid_data): train_D = DataGenerator(train_data, self.tokenizer, CONFIG['batch_size'], CONFIG['max_len']) valid_D = DataGenerator(valid_data, self.tokenizer, CONFIG['batch_size'], CONFIG['max_len']) output = Lambda(lambda x: x[:, 0])(self.albert_model.output) output = Dense(1, activation='sigmoid')(output) self.model = Model(self.albert_model.input, output) save = ModelCheckpoint(os.path.join(self.model_path), monitor='val_acc', verbose=1, save_best_only=True, mode='auto') early_stopping = EarlyStopping(monitor='val_acc', min_delta=0, patience=3, verbose=1, mode='auto') callbacks = [save, early_stopping] if self.initial_model: x1_in = Input(shape=(None, )) x2_in = Input(shape=(None, )) x_in = self.albert_model([x1_in, x2_in]) x_in = Lambda(lambda x: x[:, 0])(x_in) p = Dense(1, activation='sigmoid')(x_in) self.model = Model([x1_in, x2_in], p) else: self.model = self.albert_model self.model.compile( loss='binary_crossentropy', # optimizer=RAdam(1e-5), # 用足够小的学习率 optimizer=PiecewiseLinearLearningRate(Adam(1e-5), { 1000: 1e-5, 2000: 6e-5 }), metrics=[ 'accuracy', process.get_precision, process.get_recall, process.get_f1 ]) self.model.summary() self.model.fit_generator( train_D.__iter__(), steps_per_epoch=len(train_D), epochs=CONFIG['epochs'], validation_data=valid_D.__iter__(), validation_steps=len(valid_D), callbacks=callbacks, use_multiprocessing=CONFIG['use_multiprocessing'], )
monitor='val_acc', verbose=1, save_best_only=True, mode='auto') early_stopping = EarlyStopping(monitor='val_acc', min_delta=0, patience=8, verbose=1, mode='auto') callbacks = [save, early_stopping] model.compile( loss='sparse_categorical_crossentropy', # optimizer=Adam(1e-5), # 用足够小的学习率 optimizer=PiecewiseLinearLearningRate(Adam(1e-5), { 1000: 1e-5, 2000: 6e-5 }), metrics=['accuracy']) model.summary() train_D = data_generator(train_data) valid_D = data_generator(valid_data) model.fit_generator(train_D.__iter__(), steps_per_epoch=len(train_D), epochs=100000, validation_data=valid_D.__iter__(), validation_steps=len(valid_D), callbacks=callbacks)
from keras.optimizers import Adam model = load_pretrained_model( config_path, checkpoint_path, keep_words=keep_words, # 只保留keep_words中的字,精简原字表 albert=True) output = Lambda(lambda x: x[:, 0])(model.output) output = Dense(1, activation='sigmoid')(output) model = Model(model.input, output) model.compile( loss='binary_crossentropy', # optimizer=Adam(1e-5), # 用足够小的学习率 optimizer=PiecewiseLinearLearningRate(Adam(1e-4), { 1000: 1, 2000: 0.1 }), metrics=['accuracy']) model.summary() train_D = data_generator(train_data) valid_D = data_generator(valid_data) model.fit_generator(train_D.__iter__(), steps_per_epoch=len(train_D), epochs=10, validation_data=valid_D.__iter__(), validation_steps=len(valid_D))