Как я могу обучить свою нейронную сеть Pylearn2 нескольким целевым переменным?

У меня есть функционирование pylearn2 нейронная сеть, которая загружает данные из csv и предсказывает непрерывную целевую переменную. Как я могу изменить его, чтобы предсказать несколько различных целевых переменных?

Я использую африканский набор данных Kaggle.

И построили этот функционирующий файл mlp:

!obj:pylearn2.train.Train {
dataset: &train !obj:pylearn2.datasets.csv_dataset.CSVDataset {
    path: 'C:\Users\POWELWE\Git\pylearn2\pylearn2\datasets\soil\training_CA.csv',
    task: 'regression',
    start: 0,
    stop: 1024,
    expect_headers: True,
    num_outputs: 1
},
model: !obj:pylearn2.models.mlp.MLP {
    layers : [
        !obj:pylearn2.models.mlp.RectifiedLinear {
            layer_name: 'h0',
            dim: 200,
            irange: .05,
            max_col_norm: 2.
        },
        !obj:pylearn2.models.mlp.RectifiedLinear {
            layer_name: 'h1',
            dim: 200,
            irange: .05,
            max_col_norm: 2.
        },
        !obj:pylearn2.models.mlp.LinearGaussian {
            init_bias: !obj:pylearn2.models.mlp.mean_of_targets {
                dataset: *train },
            init_beta: !obj:pylearn2.models.mlp.beta_from_targets {
                dataset: *train },
            min_beta: 1.,
            max_beta: 100.,
            beta_lr_scale: 1.,
            dim: 1,
            layer_name: 'y',
            irange: .005
        }
    ],
    nvis: 3594,
},
algorithm: !obj:pylearn2.training_algorithms.bgd.BGD {
    line_search_mode: 'exhaustive',
    batch_size: 1024,
    conjugate: 1,
    reset_conjugate: 0,
    reset_alpha: 0,
    updates_per_batch: 10,
    monitoring_dataset:
        {
            'train' : *train,
            'valid' : !obj:pylearn2.datasets.csv_dataset.CSVDataset {
                path: 'C:\Users\POWELWE\Git\pylearn2\pylearn2\datasets\soil\training_CA.csv',
                task: 'regression',
                start: 1024,
                stop: 1156,
                expect_headers: True,
            }
        },
    termination_criterion: !obj:pylearn2.termination_criteria.MonitorBased {
        channel_name: "valid_y_mse",
        prop_decrease: 0.,
        N: 100
    },
},
extensions: [
    !obj:pylearn2.train_extensions.best_params.MonitorBasedSaveBest {
         channel_name: 'valid_y_mse',
         save_path: "${PYLEARN2_TRAIN_FILE_FULL_STEM}_best.pkl"
    },
],
save_path: "mlp.pkl",
save_freq: 1

}

В целях прогнозирования одной целевой переменной я удалил все целевые переменные из набора данных, кроме Caи переместил это в первый столбец. Когда я запускаю следующую команду в ipython консоль, она функционирует для этой единственной переменной:

%run 'C:\Users\POWELWE\Git\pylearn2\pylearn2\scripts\train.py' mlp.yaml

Я хотел бы включить другие 4 целевые переменные (P, pH, SOC, Sand), но не знаю, как я могу настроить свою модель для обучения этим дополнительным целям. Я предполагаю, что мне нужно выполнить некоторые манипуляции с num_outputs, dim, или же nvis, но не имели успеха в моих попытках. Это проект-предшественник для проекта с множеством целевых переменных, поэтому важно тренироваться, используя одну сеть, а не создавать новую сеть для каждой целевой переменной.

1 ответ

Чтобы обучить сеть, которая предсказывает значения нескольких переменных одновременно, вам просто нужно настроить сеть на наличие нескольких выходных нейронов и снабдить ее данными обучения точно так же, как вы знаете, но с несколькими целевыми значениями одновременно. Я никогда не использовал pylearn - я предпочитаю Caffe, nolearn(лазанья) или pybrain, каждая из этих библиотек способна легко справляться с такими случаями.

Пример реализации Pybrain(код использовался в конкурсе Kaggle BikeShare):

http://pastebin.ru/tqpMTzIz

Другие вопросы по тегам