【问题标题】:Multi-class regression in nolearn?nolearn中的多类回归?
【发布时间】:2015-08-29 16:03:55
【问题描述】:

我正在尝试使用 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 标签重塑为 (rows,classes) 但这意味着我必须为很多 Y 标签赋予 0 值(因为该类的值是未知的)。有没有办法在不将一些 y_labels 设置为 0 的情况下做到这一点?

【问题讨论】:

  • 你现在的y_train是什么形状?
  • y_train 具有以下形状:(1082,)。所有这些都是对应于不同(26)类的连续变量。
  • 您确定它们是连续的,还是采用离散值(0、1、...、25)?
  • 它们是连续的,所以我的意思是; [Class, Value]: [A, 7.9], [B, 5.2] [A, 4.2] 等等。所以有 26 个不同的类,但我想做(多类)回归的 1082 个连续值。
  • 所以你想忽略这个类?我不明白,你能包括一个预期输出的例子吗?还有y的前几行?

标签: nolearn


【解决方案1】:

如果你想用 26 个类做多类(或多标签)回归,你的输出不能有形状(1082,),而是(1082, 26)。为了预处理您的输出,您可以使用sklearn.preprocessing.label_binarize 这会将您的一维输出转换为二维输出。

另外,你的输出非线性应该是一个 softmax 函数,这样你的输出的行总和为 1。

【讨论】:

    猜你喜欢
    • 2015-11-18
    • 2013-10-14
    • 1970-01-01
    • 2018-09-12
    • 2016-07-31
    • 2013-05-01
    • 2021-06-03
    • 2018-07-19
    • 2015-08-13
    相关资源
    最近更新 更多