2016-07-19 2 views
1

У меня есть несколько тензоров:Как я могу получить конкретные строки тензора в TensorFlow?

logits: Этот тензор содержит окончательные оценки прогноза.

tf.Tensor 'MemN2N_1/MatMul_3:0' shape=(?, 18230) dtype=float32 

Окончательный прогноз вычисляется как predicted_op = tf.argmax (логит, 1, имя = "predict_op")

Теперь я хочу, чтобы ограничить прогноз в некоторых конкретных столбцов. Следующие два тензора содержат индексы столбцов, которые я хочу выбрать.

self._stories имеет тип

tf.Tensor 'stories:0' shape=(?, 12, 110) dtype=int32 

self._queries имеет тип

tf.Tensor 'queries:0' shape=(?, 110) dtype=int32 

Здесь 110 столбцов являются порядковые номера, которые я хочу, чтобы ограничить логит в. Например, если logits = [[10,20,30,40,50], [10,20,30,40,50] ..] и self._stories = [[[1,4, ...], [1,2,4, ...], ...], [[0,4, ...], [2,4 ...], ...] ...] и self._queries = [[1,4 ...], [2,4, ...], ...], то логиты должны выглядеть как [[20,30,50], [10,30,50] ...]

Как я могу сделать такую ​​фильтрацию индекса в тензорном потоке?

ответ

0

Вы писали: tf.equal? Это сравнивает два тензора и создает новый тензор, содержащий True, где равно, и False, где не равно.

С помощью этого bool-тензора вы подаете tf.select, который отбирает один тензор или по-другому, в зависимости от значения bool, которое вы создали на первом шаге.

Не смотрел глубоко в конкретные формы, которые вы предоставили, но с этими двумя операциями вы можете создать тот поток, который вы просите.

0

Пробег: tf.gather.

row_indices = [1] 
row = tf.gather(tf.constant([[1, 2],[3, 4]]), row_indices) 
tf.Session().run(row) # returns [[3, 4]] 

Вы можете удалить ведущую измерение размера 1, используя tf.squeeze:

row = tf.squeeze(row, squeeze_dims=0) 
Смежные вопросы