Deeplearning4j:用于审核情绪分析的LSTM示例

时间:2016-07-08 19:27:11

标签: java deeplearning4j nd4j

我正在查看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

感谢有助于澄清我的一些问题的解释或指针

2 个答案:

答案 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'向量的矢量。