Как я могу обучить свою нейронную сеть 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):