У меня есть тензор probs
с probs.shape = (max_time, num_batches, num_labels)
.
И у меня есть тензор targets
с targets.shape = (max_seq_len, num_batches)
, где значения являются индексами меток, т.е. для третьего измерения в probs
.
Теперь я хочу получить тензор probs_y
с probs.shape = (max_time, num_batches, max_seq_len)
, где третье измерение является индексом в targets
. В основном
probs_y[:,i,:] = probs[:,i,targets[:,i]]
для всех 0 <= i < num_batches
.
Как я могу этого добиться?
Аналогичная проблема с решением была опубликована здесь.
Решение там, если я правильно понял, будет таким:
probs_y = probs[:,T.arange(targets.shape[1])[None,:],targets]
Но это, кажется, не работает. Я получаю: IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
.
Кроме того, не слишком ли затратно создание временного T.arange
? Особенно, когда я пытаюсь обойти это, действительно делая его полным плотным целочисленным массивом. Должен быть лучший способ.
Может theano.map
? Но насколько я понимаю, это не распараллеливает код, так что это тоже не решение.
T.arange
, так и вtargets
. Это странно. В таком случае ваш тоже должен был сработать. - person eickenberg   schedule 09.07.2015