【发布时间】:2020-08-06 15:12:12
【问题描述】:
我一直在尝试遵循 tutorial 中的示例,但我无法训练任何变量。
我写了一个小例子,但我也没能成功:
# Train a shift bijector
shift = tf.Variable(initial_value=tf.convert_to_tensor([1.0], dtype=tf.float32), trainable=True, name='shift_var')
bijector = tfp.bijectors.Shift(shift=shift)
# Input
x = tf.convert_to_tensor(np.array([0]), dtype=tf.float32)
target = tf.convert_to_tensor(np.array([2]), dtype=tf.float32)
optimizer = tf.optimizers.Adam(learning_rate=0.5)
nsteps = 1
print(bijector(x).numpy(), bijector.shift)
for _ in range(nsteps):
with tf.GradientTape() as tape:
out = bijector(x)
loss = tf.math.square(tf.math.abs(out - target))
#print(out, loss)
gradients = tape.gradient(loss, bijector.trainable_variables)
optimizer.apply_gradients(zip(gradients, bijector.trainable_variables))
print(bijector(x).numpy(), bijector.shift)
对于 nsteps = 1,两个打印语句产生以下输出:
[1.] <tf.Variable 'shift_var:0' shape=(1,) dtype=float32, numpy=array([1.], dtype=float32)>
[1.] <tf.Variable 'shift_var:0' shape=(1,) dtype=float32, numpy=array([1.4999993], dtype=float32)>
看起来bijector 仍然使用原始的shift,即使bijector.shift 的打印值已经更新。
我无法增加nsteps,因为第一次迭代后梯度为None,我得到了这个错误:
ValueError: No gradients provided for any variable: ['shift_var:0'].
我正在使用
tensorflow version 2.3.0
tensorflow-probability version 0.11.0
我也在colab notebook上试过,所以怀疑是版本问题。
【问题讨论】:
标签: python tensorflow tensorflow-probability