nolearn中的多级回归?

时间:2015-08-29 16:03:56

标签: nolearn

我尝试使用nolearn构建神经网络,可以对多个类进行回归。

例如:

net = NeuralNet(layers=layers_s,
             input_shape=(None, 2048),
             l1_num_units=8000,
             l2_num_units=4000,
             l3_num_units=2000,
             l4_num_units=1000,
             d1_p = 0.25,
             d2_p = 0.25,
             d3_p = 0.25,
             d4_p = 0.1,
             output_num_units=noutput,
             output_nonlinearity=None,
             regression=True,
             objective_loss_function=lasagne.objectives.squared_error,
             update_learning_rate=theano.shared(float32(0.1)),
             update_momentum=theano.shared(float32(0.8)),
             on_epoch_finished=[
                    AdjustVariable('update_learning_rate', start=0.1, stop=0.001),
                    AdjustVariable('update_momentum', start=0.8, stop=0.999),
                    EarlyStopping(patience=200),
                                    ],
             verbose=1,
             max_epochs=1000)

noutput是我想要回归的类的数量,如果我将其设置为1则一切正常。当我使用26(这里的类数)作为output_num_unit时,我得到了一个Theano维度错误。 (args到gemm的尺寸不匹配(128,1000)x(1000,26) - >(128,1))

Y标签是连续变量,对应于一个类。我试图将Y标签重新整形为(行,类),但这意味着我必须给很多Y标签赋值0(因为该类的值是未知的)。如果不将y_labels设置为0,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

如果您想使用26个类进行多类(或多标记)回归,则输出的形状不能year,而是(1082,)。为了预处理输出,您可以使用sklearn.preprocessing.label_binarize 这会将您的1D输出转换为2D输出。

此外,您的输出非线性应该是softmax函数,因此输出的行总和为1.