索引第三维中的张量

时间:2015-10-10 16:52:26

标签: python indexing theano deep-learning

我有一批长度为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]) 。有没有办法直接索引张量?

1 个答案:

答案 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个元素的长度。如果序列实际上是填充的,那么您可能需要做一些更复杂的事情,以避免在填充区域内计算成本元素。