2017-11-18 4 views
0

이제 직진 해 봅시다. 현재 텐서를 인덱싱하고 0이 아닌 항을 -1로, 0을 1로 변경하려고합니다. 그러나 TensorFlow에서이를 수행하는 방법을 알지 못합니다.TensorFlow 부울 인덱스

y_[y_ != 0].assign(-1) 
y_[y_ == 0].assign(1) 

이유는 TensorFlow 부울 인덱싱을 지원하지 않는 것입니다 :

여기 내 코드입니다. 어떻게 해결할 수 있습니까?

Btw, boolean_mask은 나를 위해 작동하지 않습니다. 왜냐하면 저는 y_ 슬라이스를 반환하고 싶지 않기 때문에 y_가 값을 변경하기를 원합니다.

감사합니다.

답변

0

조건부 지정을 위해 tf.cond()을 사용할 수 있습니다. 아래 예제 코드를 제공했습니다.

import tensorflow as tf 

x_= tf.Variable(5) #non-zero variable 
y_= tf.Variable(0) #variable euqals to 0 

y_ =tf.cond(tf.equal(y_,0),lambda :y_.assign(1),lambda :y_.assign(-1)) #assign 1 if variable equals to zero else -1 
x_ =tf.cond(tf.equal(x_,0),lambda :x_.assign(1),lambda :x_.assign(-1)) #assign 1 if variable equals to zero else -1 

sess = tf.Session() 
sess.run(tf.global_variables_initializer()) 

with sess.as_default(): 
    print(y_.eval()) #prints 1 
    print(x_.eval()) #prints -1 

희망이 있습니다.

+0

고마워! 이것은 랭크 0의 경우 훌륭한 일을 할 수 있습니다! 그러나, 내 경우에는 y_가 CNN의 흐름에 있기 때문에 실제로 그래프를 실행하기 전에 모양이 실제로 rank1 (제 경우에는 (?,)입니다)입니다. 이제 출력은'ValueError : Shape은 랭크 0이되어야하지만 입력 도형으로 'cond/Switch'(op : 'Switch')의 랭크 1이됩니다 : [?], [?].', 그것을 고칠 수있는 방법은 무엇입니까? ? – Andre

+0

안녕하세요, Nipun! 나는'tf.where'를 사용하여이 문제를 해결했다고 생각합니다. 여전히 노력에 감사드립니다! – Andre

+0

그래, 미안해, 분명히하지 않았어! 도움을 주셔서 감사합니다. – Andre

관련 문제