Tensorflow 运行tf.global_variables_initializer()时InvalidArgumentError
基本上,我有一个函数,它需要一个张量x和两个占位符z和cTensorflow 运行tf.global_variables_initializer()时InvalidArgumentError,tensorflow,Tensorflow,基本上,我有一个函数,它需要一个张量x和两个占位符z和c 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) ) retur
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
调用定义的函数不会生成任何错误:
error_r = error_robust(layer1_b.reconstruction, flat_mnist_data, param_robust)
这将生成一个错误:
sess.run(tf.global_variables_initializer())
InvalidArgumentError(回溯见上文):必须为带有dtype float的占位符张量“占位符”输入一个值
[[Node:Placeholder=PlaceholdType=DT_FLOAT,shape=[],_device=“/job:localhost/replica:0/task:0/gpu:0”]]
我真的不明白为什么会这样。关于如何解决这个问题有什么想法吗?好的,我知道了。我最初期望c是一个简单的标量。所以我使用tf.Variable作为tf.cond的第二个参数。 更新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
def错误\u鲁棒性(x,z,c):
zz=tf.重塑(z,[-1,28,28,1])
var=tf.减少平均值(x-zz)
out=tf.cond(tf.abs(var)好的,我知道了。我首先希望c是一个简单的标量。所以我使用tf.Variable作为tf.cond的第二个参数。
更新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
def错误\u鲁棒性(x,z,c):
zz=tf.重塑(z,[-1,28,28,1])
var=tf.减少平均值(x-zz)
out=tf.cond(tf.abs(var)