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

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