我正在查看deeplearning 4j的例子,根据他们的情绪对电影评论进行分类。 ReviewExample
在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
?
感谢有助于澄清我的一些问题的解释或指针
答案 0 :(得分:0)
它是每个维度的索引。 All()是一个指标(使用整个维度)。请参阅nd4j用户指南: http://nd4j.org/userguide
至于1.那个1意味着那里的标签类。这是一个文本分类问题:从文本和单词向量中取出窗口,并从中预测出类。
对于标签掩码:神经网络的预测发生在序列的末尾。看到: http://deeplearning4j.org/usingrnns
答案 1 :(得分:0)
写一个测试,你就会知道。
val features = Nd4j.zeros(2,2,3) val toPut = Nd4j.ones(2) features.put([[[[[[[[[(((((
结果是
[[[0.00,1.00,0.00],
[0.00,1.00,0.00]],
[[0.00,0.00,0.00],
[0.00,0.00,0.00]]]
它会把'到'Put'向量的矢量。