當任何可訓練變量將「validate_shape」參數設置爲False時,Tensorflow的AdamOptimizer會爲我拋出一個錯誤。我將此參數設置爲false以允許在運行時動態批量處理。Tensorflow AdamOptimizer在變量has validate_shape = False時拋出錯誤
~/anaconda/lib/python3.5/site-packages/tensorflow/python/framework/tensor_shape.py in as_list(self)
774 """
775 if self._dims is None:
--> 776 raise ValueError("as_list() is not defined on an unknown TensorShape.")
777 return [dim.value for dim in self._dims]
778
ValueError: as_list() is not defined on an unknown TensorShape.
我無法用GradientDescentOptimizer重現此錯誤,但Tensorflow中的所有其他優化器都拋出相同的錯誤。
opt = tf.train.AdamOptimizer()
X = tf.placeholder(tf.float64, shape=[None, None], name='X')
Y = tf.placeholder(tf.float64, shape=[None, 1], name='Y')
B = tf.Variable(initial_value=tf.zeros([tf.shape(X)[1], 1], dtype=tf.float64), validate_shape=False, name='B')
prediction = tf.matmul(X, B)
loss = tf.reduce_sum((Y- prediction) ** 2)
opt_op = opt.minimize(loss)
GradientDescentOptimizer似乎在運行時支持動態變量形狀,但其他優化器沒有?
全REPRO於:https://github.com/narner90/scratchpad/blob/master/AdamOptimizerValidateShape.ipynb
感謝您的回覆。可以用tf.zeros_like而不是'tf.zeros'來初始化矢量矢量以在運行時支持動態大小? – narner90
好點!但是,這些變量在初始化時(當你調用'session.run(init_op)')時,仍然需要一個完整的形狀,這發生在實際的'session.run'之前。所以仍然不可行。 – yuefengz