Tensorflow 传递优化器的占位符会导致错误;初始“U值必须指定形状”;

Tensorflow 传递优化器的占位符会导致错误;初始“U值必须指定形状”;,tensorflow,placeholder,Tensorflow,Placeholder,训练网络时,希望能够将beta1参数作为参数传递,从而使其成为占位符 self.beta1=tf.placeholder(tf.float32) 几行之后,这一行出现错误 self.train\u adam=tf.train.AdamOptimizer(self.eta,beta1=self.beta1,epsilon=1e-15)。最小化(self.cost\u m) 错误: ValueError:initial\u值必须指定一个形状:张量(“占位符\u 5:0”,dtype=float32)

训练网络时,希望能够将beta1参数作为参数传递,从而使其成为占位符

self.beta1=tf.placeholder(tf.float32)

几行之后,这一行出现错误

self.train\u adam=tf.train.AdamOptimizer(self.eta,beta1=self.beta1,epsilon=1e-15)。最小化(self.cost\u m)

错误:
ValueError:initial\u值必须指定一个形状:张量(“占位符\u 5:0”,dtype=float32)

取出beta1=self.beta1将导致错误消失,因此错误一定与此有关

我不知道为什么会发生这种情况,因为
占位符
不需要指定形状。我试过使用self.beta1=tf.placeholder(tf.float32,shape=None),但同样的错误也不起作用


有什么想法吗?

只要给占位符一个形状,因为它是一个常量:

self.beta1 = tf.placeholder(tf.float32, shape=[])

作为说明,添加
shape=None
没有任何效果,因为在未指定参数的情况下,python已经默认假定
shape
None
。但它首先不应该抱怨,
占位符
不需要用形状声明。一年多以后,我遇到了同样的问题,我记得我以前也问过这个问题。多么奇怪的设计决定。