CBOW相当于填字游戏, 学习CBOW的时候对NLLLoss的一点研究:
NLLLoss的定义是一大堆公式, 没有仔细学习, 用实践法研究一下其作用:
criterion = nn.NLLLoss()
…
loss = criterion(out, target)
在本例中, 其中 out 是一个数组(list), target 是一个float张量
out 的长度代表了 字典的长度.
print(out)
tensor([[-6.7951, -3.5001, -6.4829, -5.4005, -6.5381, -3.1883, -3.9513, -4.2790,
-6.8641, -6.7017, -5.5150, -5.2415, -5.0595, -0.5234, -5.9353, -3.8215,
-5.7704, -6.4269, -4.9297, -5.0495, -6.1361, -6.2943, -7.2959, -3.6133,
-5.6585, -3.4199, -6.0891, -6.1402, -6.4806, -5.5290, -5.9832, -4.9311,
-6.0941, -7.0798, -5.2637, -4.5294, -6.1587, -4.9618, -5.3551, -2.5602,
-6.7787, -5.6728, -4.7116, -5.1451, -6.3173, -4.9062, -5.8129, -6.2326,
-6.0875]], device=‘cuda:0’, grad_fn=)
print(target)
tensor([13], device=‘cuda:0’)
可以发发现 下标 13 位置的数值 -0.5234 是所有数组里最接近0的.
所以猜测, NLLLoss 所有数组里最接近0的下标, 就是target的数值.
多个结果均符合猜测