简体   繁体   English

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

[英]How can I train my pylearn2 neural network on multiple target variables?

I have a functioning pylearn2 neural network which loads data from a csv and predicts a continuous target variable. 我有一个功能正常的pylearn2神经网络,它从csv加载数据并预测一个连续的目标变量。 How can I change it to predict multiple distinct target variables? 如何更改它以预测多个不同的目标变量?

I am using Kaggle's African soil dataset . 我正在使用Kaggle的非洲土壤数据集

And have constructed this functioning mlp file: 并构建了这个功能正常的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

} }

For the purpose of predicting a single target variable, I removed all target variables from the dataset except Ca , and moved that to the first column. 为了预测单个目标变量,我从数据集中删除了除Ca之外的所有目标变量,并将其移动到第一列。 When I run the following command in the ipython console, it functions for that single variable: 当我在ipython控制台中运行以下命令时,它对该单个变量起作用:

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

I would like to include the other 4 target variables ( P , pH , SOC , Sand ), but do not know how I can set my model to train on these additional targets. 我想包括其他4个目标变量( PpHSOCSand ),但不知道如何设置我的模型来训练这些额外的目标。 I assume I need to perform some manipulations of num_outputs , dim , or nvis , but haven't had any success in my attempts. 我假设我需要对num_outputsdimnvis进行一些操作,但在我的尝试中没有取得任何成功。 This is a precursor project to one with many more target variables, so it is important that I train using a single network, rather than constructing a new network for each target variable. 这是一个具有更多目标变量的前体项目,因此我使用单个网络进行训练非常重要,而不是为每个目标变量构建新网络。

To train a network which predicts values of several variables at the same time you just need to setup your network to have multiple output neurons and feed it with the training data just the same way you do know but with multiple target values at the same time. 要训​​练一个同时预测多个变量值的网络,您只需要将网络设置为具有多个输出神经元,并将其与训练数据一起提供,就像您知道但同时具有多个目标值一样。 I haven't used pylearn ever - I prefer Caffe, nolearn(lasagne) or pybrain, each of these libraries are able to easily handle such cases. 我没有使用过pylearn - 我更喜欢Caffe,nolearn(lasagne)或pybrain,这些库中的每一个都能够轻松处理这种情况。

Example of pybrain implementation (code was used in kaggle's BikeShare challenge): pybrain实现示例(代码用于kaggle的BikeShare挑战):

http://pastebin.ru/tqpMTzIz http://pastebin.ru/tqpMTzIz

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM