Deeplearning4j: пример LSTM для анализа отзывов

Я просматриваю пример глубокого обучения 4j для классификации обзоров фильмов в соответствии с их настроением. Пример обзора

В строке 124-142 создаются N-мерные массивы, и я не уверен, что происходит в этих строках:

Строка 132:

features.put(new INDArrayIndex[]{NDArrayIndex.point(i),
NDArrayIndex.all(), NDArrayIndex.point(j)}, vector);

Я могу представить, что .point(x) и .point(j) обращаются к ячейке в массиве, но что именно здесь делает вызов NDArrayIndex.all()?

При построении массива признаков все более или менее нормально, что там происходит, меня полностью смущает маска метки и эта переменная lastIdx

Строка 138 - 142

            int idx = (positive[i] ? 0 : 1);
            int lastIdx = Math.min(tokens.size(),maxLength);
            labels.putScalar(new int[]{i,idx,lastIdx-1},1.0);   //Set label: [0,1] for negative, [1,0] for positive
            labelsMask.putScalar(new int[]{i,lastIdx-1},1.0);   //Specify that an output exists at the final time step for this example

Сам массив меток адресуется i, idx, например. столбец / строка, для которых установлено значение 1,0, но я действительно не понимаю, как вписывается эта информация о временном шаге? Является ли это условным, что последний параметр должен помечать последнюю запись?

Тогда почему labelsMask использует только i, а не i, idx?

Спасибо за пояснения или указатели, которые помогают прояснить некоторые из моих вопросов.


person toobee    schedule 08.07.2016    source источник


Ответы (2)


Это индекс для каждого измерения. All() — это индикатор (используйте все это измерение). См. руководство пользователя nd4j: http://nd4j.org/userguide.

Что касается 1. Здесь 1 должен быть классом для метки. Это проблема классификации текста: возьмите окно из векторов текста и слов и предскажите класс на основе этого.

Что касается маски метки: предсказание нейронной сети происходит в конце последовательности. См.: http://deeplearning4j.org/usingrnns

person Adam Gibson    schedule 10.01.2017

напиши тест и узнаешь.

val features = Nd4j.zeros(2, 2, 3) val toPut = Nd4j.ones(2) features.put(Array[INDArrayIndex](NDArrayIndex.point(0), NDArrayIndex.all, NDArrayIndex.point(1)), положить)

результат [[[0,00, 1,00, 0,00],
[0,00, 1,00, 0,00]],

[[0.00, 0.00, 0.00],
[0.00, 0.00, 0.00]]] он поместит вектор toPut в функции.

person 张军强    schedule 12.12.2017