如何在多个目标变量上训练我的pylearn2神经网络?

时间:2015-08-03 16:04:19

标签: python machine-learning neural-network regression pylearn

我有一个正常运行的pylearn2神经网络,它从csv加载数据并预测一个连续的目标变量。如何更改它以预测多个不同的目标变量?

我正在使用Kaggle's African soil dataset

并构建了这个功能正常的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个目标变量(PpHSOCSand),但不知道如何将我的模型设置为训练这些额外的目标。我假设我需要对num_outputsdimnvis进行一些操作,但在我的尝试中没有取得任何成功。这是一个具有更多目标变量的前体项目,因此我必须使用单个网络进行训练,而不是为每个目标变量构建新网络。

1 个答案:

答案 0 :(得分:0)

要训练一个网络,同时预测几个变量的值,您只需要设置您的网络以拥有多个输出神经元,并将其与训练数据一起提供,就像您知道但具有多个目标值一样。同时。我还没有使用过pylearn - 我更喜欢Caffe,nolearn(lasagne)或pybrain,这些库中的每一个都能够轻松处理这种情况。

pybrain实现示例(代码用于kaggle&#39的BikeShare挑战):

http://pastebin.ru/tqpMTzIz