2017-02-16 26 views
0

У меня есть тензор Theano Вектор next_probs что-то вроде [0.222, 0.34342, 0.41324, 0.1231, ...], который является выходом следующей функции:Изменение значений в тензорной Theano вектора

next_probs = tensor.nnet.softmax(logit) 

logit представляет собой вектор, который имеет ту же размерность, next_probs.

Как я могу изменить одно конкретное значение на 1, а остальные на 0 в next_probs?

ответ

1

Какое значение конкретно вы хотите изменить? если вы просто хотите иметь вектор, которые имеют ту же размерность, как next_probs вы можете использовать zeros и set_subtensor как ниже

ret = T.zeros(next_probs.shape) 
ret = T.set_subtensor(ret[index],1) 

Если вы хотите использовать эту функцию в модели классификации, и вам нужен класс с наибольшей вероятностью в next_probs стать 1 и другие стали 0 это мой другой ответ:

ret = T.zeros(next_probs.shape) 
ret = T.set_subtensor(ret[T.argmax(next_probs)],1) 

ret вектор с 1 в классе с наибольшей вероятностью, и 0 для остальных

+0

Я получил Ошибка измерения: IndexError: индекс за пределами Применить узел, вызвавший ошибку: IncSubtensor {InplaceSet; int64} (Alloc.0, TensorConstant {1}, Constant {9}) Топопортовый индекс: 63 Типы входных данных: [TensorType (float32, matrix), TensorType (int8, scalar), Scalar (int64)] Формы входов: [(1, 26942),(),()] Входы: [(107768, 4),(),() ] Значения входов: ['не показано', массив (1, dtype = int8), 9] Вывод клиентов: [[Softmax (IncSubtensor {InplaceSet; int64} .0)]] – yusuf