Как еще больше повысить точность при байесовской оптимизации

avatar
Greg Yang
8 августа 2021 в 23:58
65
0
0

Я использую байесовскую оптимизацию, чтобы найти хорошую модель для категориального временного ряда. Я стремлюсь максимизировать val_categorical_accuracy, однако пока он никогда не улучшается выше 0,4. Что-то не так с моей гипермоделью ниже?

class v7_HyperModel_C(HyperModel):
    def build(self, hp):

        model = Sequential()

        # Input layer
        model.add(LSTM(INPUT_NODES, return_sequences=True,  
                       input_shape=(train_X.shape[1], train_X.shape[2])))
        model.add(LeakyReLU(alpha=0.1))
        model.add(BatchNormalization(axis=-1)),
        model.add(Dropout(hp.Float('dropout_input', min_value=0.8, max_value=0.9, step=0.05)))

        for i in range(hp.Int('num_fb_layers', 1, 5)):

            model.add(LSTM(hp.Int('hidden_fb_nodes', min_value=INPUT_NODES, max_value=INPUT_NODES * 10, step=INPUT_NODES),
                           return_sequences=True))
            model.add(LeakyReLU(alpha=0.1))
            model.add(BatchNormalization())
    
            model.add(Dropout(hp.Float('dropout_fb_hidden', min_value=0.5, max_value=0.8, step=0.05)))

        model.add(LSTM(hp.Int('hidden_nonfb_nodes', min_value=INPUT_NODES, max_value=INPUT_NODES * 10, step=INPUT_NODES)))
        model.add(LeakyReLU(alpha=0.1))
        model.add(BatchNormalization())                      
        model.add(Dropout(hp.Float('dropout_nonfb_hidden', min_value=0.5, max_value=0.8, step=0.05)))

        model.add(Dense(units=POSSIBLE_OUTCOME_COL))
        model.add(LeakyReLU(alpha=0.1))
        
        model.compile(
                #loss='mse',          
                loss='categorical_crossentropy',  
                run_eagerly = True,
                optimizer=keras.optimizers.Adam(learning_rate=hp.Choice('learning_rate', [1e-3, 1e-4, 1e-5, 1e-6])),
                metrics = ['categorical_accuracy']
        )
    
        return model

hypermodel = v7_HyperModel_C()
current_project_name = 'M6_tuning_C'
DEVICE='CPU'
with tf.device(DEVICE):
    tuner = BayesianOptimization(
        hypermodel,
        objective=Objective('val_categorical_accuracy', direction="max"),
        num_initial_points=20,
        max_trials=300,
        directory='./V7_C/',
        project_name=current_project_name)

    tuner.search(train_X, train_y,
                 epochs=100, 
                 validation_split=0.1,
                verbose=1)

Кроме того, пока я жду завершения оптимизации, я отдельно создал модель, пытаясь сделать некоторые тестовые прогнозы с гиперпараметрами с наилучшей на данный момент точностью, которая составляет около 0,4.

Я обучал модель 500 эпохам, надеясь, что точность превысит 0,4.

def v7_HyperModel_C():

    model = Sequential()

    # Input layer
    model.add(LSTM(INPUT_NODES, return_sequences=True,  
                   input_shape=(train_X.shape[1], train_X.shape[2])))
    #model.add(LeakyReLU(alpha=0.1))
    model.add(ReLU())
    model.add(BatchNormalization(axis=-1)),
    model.add(Dropout(0.9))

    # Hidden Layers with feedback
    for i in range(3):
        model.add(LSTM(210, return_sequences=True))
        model.add(LeakyReLU(alpha=0.1))
        model.add(BatchNormalization())    
        model.add(Dropout(0.7))

    model.add(LSTM(70))
    model.add(LeakyReLU(alpha=0.1))
    model.add(BatchNormalization())                      
    model.add(Dropout(0.55))

    # Output layer

    model.add(Dense(units=POSSIBLE_OUTCOME_COL))
    model.add(LeakyReLU(alpha=0.1))



    model.compile(         
            loss='categorical_crossentropy',  
            run_eagerly = True,
            optimizer=keras.optimizers.Adam(learning_rate=0.001),
            metrics = ['categorical_accuracy']
    )

    return model

но в конце обучения точность даже не коснулась 0,4. Что может пойти не так? Любые мысли приветствуются.

Источник
mimocha
9 августа 2021 в 03:39
0

Можете ли вы предоставить более подробное описание задачи, которую вы пытаетесь решить, или системы, которую вы пытаетесь смоделировать? Кроме того, можете ли вы объяснить, почему вы выбрали именно эту модель для этой задачи? Трудно увидеть проблему, просто взглянув на архитектуру модели.

Ответы (0)