我有一批长度为N
的{{1}}整数序列,它们嵌入到L
张量中。该序列由我的网络架构自动编码。所以,我有:
N*L*d
就我所知,索引位于张量的第一维,所以我不得不使用from theano import tensor as T
X = T.imatrix('X') # N*L elements in [0,C]
EMB = T.tensor('Embedding') # N*L*d
... # some code goes here :-)
PY = T.tensor('PY') # N*L*C probability of the predicted class in [0,C]
cost = -T.log(PY[X])
。有没有办法直接索引张量?
答案 0 :(得分:1)
听起来你想要一个theano.tensor.nnet.categorical_crossentropy
的三维版本?
如果是这样,那么我认为你可以简单地将真实类标签索引的矩阵展平为一个向量,将预测类概率的三维张量展平成矩阵,然后使用内置函数。
cost = T.nnet.categorical_crossentropy(
Y.reshape((Y.shape[0] * Y.shape[1], X.shape[2])),
X.flatten())
Y
中的条目顺序可能需要先调整(例如通过dimshuffle
),以确保矩阵中的条目和被比较的向量相互对应。
我们假设,正如问题所示,序列没有填充 - 它们都是L
个元素的长度。如果序列实际上是填充的,那么您可能需要做一些更复杂的事情,以避免在填充区域内计算成本元素。