我有一个功能正常的pylearn2
神经网络,它从csv
加载数据并预测连续目标变量。我如何改变它来预测多个不同的目标变量?
我使用的是Kaggle的非洲土壤数据集。
并构造了这个功能mlp文件:
!obj:pylearn2.train.Train {
dataset: &train !obj:pylearn2.datasets.csv_dataset.CSVDataset {
path: 'C:UsersPOWELWEGitpylearn2pylearn2datasetssoiltraining_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:UsersPOWELWEGitpylearn2pylearn2datasetssoiltraining_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:UsersPOWELWEGitpylearn2pylearn2scriptstrain.py' mlp.yaml
我想包括其他4个目标变量(P
, pH
, SOC
, Sand
),但不知道如何设置我的模型来训练这些额外的目标。我假设我需要对num_outputs
、dim
或nvis
执行一些操作,但在我的尝试中没有任何成功。这是一个具有更多目标变量的先驱项目,因此我使用单个网络进行训练,而不是为每个目标变量构建一个新网络,这一点很重要。
要训练一个同时预测多个变量值的网络,你只需要设置你的网络,使其具有多个输出神经元,并以同样的方式为其提供训练数据,但同时具有多个目标值。我从来没用过pylearn——我更喜欢Caffe、nolearn(lasagne)或pybrain,这些库都能轻松处理这种情况。
pybrain实现示例(代码用于kaggle的BikeShare挑战):
http://pastebin.ru/tqpMTzIz