nar*_*r90 2 python machine-learning tensorflow
当任何可训练变量的“validate_shape”参数设置为 False 时,Tensorflow 的 AdamOptimizer 会向我抛出错误。我将此参数设置为 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.
Run Code Online (Sandbox Code Playgroud)
我无法使用 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)
Run Code Online (Sandbox Code Playgroud)
GradientDescentOptimizer 似乎在运行时支持动态变量形状而其他优化器不支持,这有什么原因吗?
完整再现:https : //github.com/narner90/scratchpad/blob/master/AdamOptimizerValidateShape.ipynb
在AdamOptimizer需要定义几个内部变量作为其记录__init__功能:https://www.tensorflow.org/versions/r0.11/api_docs/python/train.html#AdamOptimizer
这些变量(矩向量)需要与要更新的变量具有相同的形状,并且不能动态整形。它们通过tf.zeros不接受未知或部分已知形状的方式进行初始化,因为如果形状未知,tensorflow 不知道将多少元素设置为零。即使您可以使用tf.zeros_like,当您运行session.run(init_op).
| 归档时间: |
|
| 查看次数: |
1439 次 |
| 最近记录: |