2017-05-12 5 views
0

은 기본적으로 I는 텐서를 X 두 자리 Z 및 C를 예상하는 기능을 갖는다.InvalidArgumentError()는

error_r = error_robust(layer1_b.reconstruction, flat_mnist_data, param_robust) 

이 오류가 발생합니다 : 오류를 생성하지 않습니다 정의 된 함수를 호출

# TENSORFLOW PLACEHOLDERS 
sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True)) 
flat_mnist_data = tf.placeholder(tf.float32, [None, 28*28]) 
dropout_keep_prob = tf.placeholder(tf.float32) 
param_robust = tf.placeholder(tf.float32, shape=()) 

:

def error_robust(x,z,c): 
    zz = tf.reshape(z, [-1, 28, 28, 1]) 
    var = tf.reduce_mean(x-zz) 
    out = tf.cond(tf.abs(var) <= c, lambda: (c*c/6.0)*(1 - tf.pow(1-tf.pow(var/c,2),3)), lambda: tf.Variable(c*c/6.0)) 
    return out 

가 나는 거 사용을 오전 자리와 텐서를 정의

sess.run(tf.global_variables_initializer()) 

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder' with dtype float [[Node: Placeholder = Placeholderdtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/gpu:0"]]

나는 그것이 실제로 일어나는 이유를 정말로 이해하지 못합니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

답변

0

좋아, 알았다. 나는 처음에 c이 단순한 스칼라라고 기대했다. 그래서 tf.cond의 두 번째 인수로 tf.Variable을 사용하고있었습니다. error_robust 함수를 업데이트하면 해결됩니다.

def error_robust(x,z,c): 
    zz = tf.reshape(z, [-1, 28, 28, 1]) 
    var = tf.reduce_mean(x-zz) 
    out = tf.cond(tf.abs(var) <= c, lambda: (c*c/6.0)*(1 - tf.pow(1-tf.pow(var/c,2),3)), lambda: c*c/6.0) 
    return out