Мультиклассовая регрессия в 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 to gemm (128,1000)x(1000,26)->(128,1))

Метки Y являются переменными продолжения, соответствующими классу. Я попытался изменить Y-метки (строки, классы), но это означает, что я должен дать многим Y-меткам значение 0 (потому что значение для этого класса неизвестно). Есть ли способ сделать это, не устанавливая y_labels в 0?

1 ответ

Если вы хотите сделать мультиклассовую (или многоуровневую) регрессию с 26 классами, ваш вывод не должен иметь форму (1082,), но (1082, 26), Чтобы предварительно обработать ваш вывод, вы можете использовать sklearn.preprocessing.label_binarize который преобразует ваш 1D выход в 2D выход.

Кроме того, ваша выходная нелинейность должна быть функцией softmax, чтобы строки вашего выходного значения были равны 1.

Другие вопросы по тегам