2017-10-01 1 views
0

그래서 나는 과거 동안이 주제를 봤어 어떤 해결책을 가로 질러 오지 않았다.Tensorflow, tf.equals를 부울로 활용하는 방법은 무엇입니까?

그래서 목록 ("iterateOverMe")을 반복하고 지정된 값 ("value")과 동일한 모든 요소를 ​​"1"로 바꿀 수있는 람다 함수가 있습니다. 다른 값은 "9"로 표시해야합니다. "형식 오류 :

idk = tf.map_fn(lambda x: 1 if tf.equal(tf.cast(x, tf.int32), value) else 9, iterateOverMe, dtype=tf.int32) 

는하지만 다음과 같은 말을 오류 메시지가 표시됩니다. 파이썬 bool이 허용되지 않는 tf.Tensor로 사용을 텐서가 정의되어있는 경우 테스트하는 대신 if t:if t is not None:를 사용하고 TensorFlow 작전을 사용 텐서의 값에 조건부로 서브 그래프를 실행하기 위해 tf.cond와 같이. "

그러나 적어도 tf.equal 문을 직접 인쇄 할 때 예상되는 True/False 값을 제공합니다!

내가 시도한 것.

1 : tensor에 reduce_all을 사용하고 작동하지 않아도 여전히 같은 오류가 발생합니다.

TypeError : tf.Tensor을 Python bool으로 사용하는 것은 허용되지 않습니다. 텐서가 정의되었는지 테스트하려면 if t: 대신 if t is not None:을 사용하고 tf.cond와 같은 TensorFlow 연산을 사용하여 텐서 값에 조건이 지정된 하위 그래프를 실행하십시오.

2 : 제안 된 "t가 없음이 아닙니다."를 사용하십시오. 아무리해도 아무 것도 없음과 같지 않으므로 작동하지 않습니다.

그래서 나는 슬프게도 잘못된 1의 목록을 얻습니다.

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 

3 : tf.cond를 사용하여 그렇게 시도했습니다. 그러나 나는 진실하거나 틀린 것을 돌려주고 싶기 때문에 전혀 작동하지 않습니다. 호출 가능함이 필요합니다. idk = tf.map_fn (tf.equal (tf.cast (x, tf.int32), 반복기)의 경우 람다 x : 1, 참, 거짓) else -1, modifiedTrainingLabels, dtype = tf.int32)

4 :이 ...이 가증함 또한 작동하지 않았습니다.

idk = tf.map_fn(lambda x: 1 if tf.cond(tf.equal(tf.cast(x, tf.int32), iterator), lambda : True, lambda: False) else 9, modifiedTrainingLabels, dtype=tf.int32) 

답변

0

병렬로 텐서 여러 위치에서의 상태를 평가합니다 tf.where() 동작이 할 수있다; 주어진 모양의 텐서를 생성하는 tf.fill() 연산.

의 당신이 tf.Tensor (10)의 값이 있다고 가정 해 봅시다, iterateOverMe라고하고, 목표 값은 value 전화 :

iterateOverMe = ...          # shape: (10,) 

mask = tf.equal(tf.cast(iterateOverMe, tf.int32), value) # shape: (10,) 

result = tf.where(mask, 
        tf.fill(tf.shape(iterateOverMe), 1), # If `mask` is true. 
        tf.fill(tf.shape(iterateOverMe), 9)  # If `mask` is false. 
       )          # shape: (10,)