Многоуровневая классификация с Theano и Lasagne?

Я пытаюсь превратить учебник mnist.py в классификацию с несколькими метками, используя CNN. Я очень новичок в этой области, и моя цель - понять архитектуру, формат данных ввода-вывода, чтобы быть более знакомым и решать свои собственные проблемы классификации с несколькими метками.

Из того, что я читал до сих пор, изменения, которые я сделал, следующие:

  1. Измените учебные и тестовые метки на массивы 2d numpy, где первое измерение (строки) соответствует экземплярам, ​​а второе измерение (столбцы) - конкретным меткам, соответствующим каждому экземпляру. Например, mnist, если я хочу преобразовать его в классификацию с 10 несколькими метками, y_train и y_test должны быть такими:

    y = np.array([[0, 1, 1, 0, 1, 0, 0, 0, 0, 0], [0, 1, 1, 0, 1, 0, 0, 0, 1, 1],....[1, 1, 1, 0, 1, 0, 0, 0, 0, 1]]);

  2. В сетевом коде мы меняем нелинейность в последнем слое с softmax на сигмоид.

    network = lasagne.layers.DenseLayer( lasagne.layers.dropout(network, p=.5), num_units=10, nonlinearity=lasagne.nonlinearities.sigmoid)

    num_units остаются 10, верно? Опять же, это проблема 10-классовой классификации или нет?

  3. В переменных theano мы меняем target_var = T.imatrix('targets') с T.ivector. Затем в соответствии с этим сообщением я изменить функции потерь с категориальной кросс-энтропии на бинарную кросс-энтропию

    loss = lasagne.objectives.binary_crossentropy(prediction, target_var)

    test_loss = lasagne.objectives.binary_crossentropy(test_prediction, target_var)

  4. Я также меняю переменную test_acc, потому что получаю ошибку с несоответствием размера ввода. Судя по предыдущему сообщению, это решение работает

    binaryPrediction = test_prediction > .5 test_acc = T.mean(T.eq(binaryPrediction, target_var))

Ну, теперь я не получаю ошибок, но я не совсем уверен, что код правильный. Когда вы выполняете классификацию с несколькими метками, вам нужно определить другие показатели, кроме типичной точности, верно? Какие-либо предложения??


person sagrath169    schedule 02.02.2017    source источник
comment
Я думаю, вы запутались между классификацией с несколькими метками и классификацией с несколькими классами. Многоклассовая классификация означает, что каждое изображение принадлежит только одному классу, и у вас есть много классов (класс цифр 0, 1, 2 и т. д.). Классификация с несколькими метками означает, что одно изображение принадлежит более чем к одному классу (например, одно изображение может содержать цветок, который также является тюльпаном). MNIST — это всего лишь мультиклассовый набор данных, одна цифра не может принадлежать двум классам одновременно.   -  person Roxana Istrate    schedule 09.08.2017