1

我正在查看深度学习 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只使用而不使用ii, idx

感谢您提供有助于澄清我的一些问题的解释或指示

4

2 回答 2

0

它是每个维度的索引。All() 是一个指标(使用整个维度)。请参阅 nd4j 用户指南: http ://nd4j.org/userguide

至于 1。那个 1 意味着那里的标签的类。这是一个文本分类问题:从文本和词向量中获取窗口,并从中预测类别。

至于标签掩码:神经网络的预测发生在序列的末尾。见: http ://deeplearning4j.org/usingrnns

于 2017-01-10T05:02:47.070 回答
0

写一个测试,你会知道的。

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'向量放到特征中。

于 2017-12-12T03:32:40.227 回答