Я просматриваю пример глубокого обучения 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
?
Спасибо за пояснения или указатели, которые помогают прояснить некоторые из моих вопросов.