2016-07-19 5 views
1

나는 몇개의 텐서를 가지고 있습니다 :TensorFlow에서 특정 텐서 행을 얻으려면 어떻게해야합니까?

logits :이 텐서는 최종 예측 스코어를 포함합니다.

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

최종 예측은 predicted_op = tf.argmax (logits, 1, 이름 = "predict_op")

가 지금은 일부 특정 컬럼에 예측을 제한 할로 계산됩니다. 다음의 두 가지 텐서는 내가 선택하고 싶은 컬럼 인덱스를 포함합니다.

self._stories은 여기에 (110) 열이 나는에 logits을 제한 할 인덱스 번호가

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

유형

이다 유형

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

self._queries이다. 예를 들어, logits = [[1020304050], [1020304050] ..] 및 self._stories = [[[1,4, ...], [1,2,4, ...], ...], [[0,4, ...], [2,4 ...], ...] ...] 및 self._queries = [[1,4 ...], [2,4, ...], ...] 그러면 로그는 [[20,30,50], [10,30,50] ...]과 같이 보입니다.

tensorflow에서 이러한 종류의 인덱스 필터링을 어떻게 수행합니까?

답변

0

시도해 보셨습니까 tf.equal? 이것은 두 개의 텐서를 비교하여 True를 포함하는 새로운 텐서를 만듭니다.

이 bool-tensor를 사용하면 1 단계에서 작성한 bool-value에 따라 하나의 텐서 또는 다른 요소에서 선택하는 tf.select을 요소 단위로 제공합니다.

제공된 특정 도형을 자세히 살펴 보지 않았지만 이러한 두 가지 작업으로 원하는 종류의 흐름을 만들 수 있습니다.

0

시도 tf.gather.

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

당신은 tf.squeeze를 사용하여 크기 1의 주요 차원을 제거 할 수 있습니다

row = tf.squeeze(row, squeeze_dims=0) 
관련 문제