渴望执行得到可训练的变量

时间:2019-03-20 15:19:35

标签: tensorflow eager-execution

在我看到的有关tfe的所有toturials(包括tf官方文档)中,该示例使用了梯度带,并手动将所有梯度添加到了计算的梯度列表中,例如

variables = [w1, b1, w2, b2]  <--- manually store all the variables
optimizer = tf.train.AdamOptimizer()
with tf.GradientTape() as tape:
 y_pred = model.predict(x, variables)
 loss = model.compute_loss(y_pred, y)
 grads = tape.gradient(loss, variables) < ---- send them to tape.gradient
 optimizer.apply_gradients(zip(grads, variables))

但这是唯一的方法吗?即使对于大型模型,我们也需要累加所有参数,否则我们可以通过某种方式访问​​默认图形变量列表
尝试访问tf.get_default_graph().get_collection(tf.GraphKeys.GLOBAL_VARIABLES) 或在tfe会话中的trainable_variables给出了空白列表。

1 个答案:

答案 0 :(得分:1)

据我所知,TensorFlow中的Eager模式将有关模型的信息存储在对象中,例如tf.keras.Modeltf.estimator.Estimator中。在没有图的情况下,您只能在那里获取变量列表,例如使用tf.keras.Model.trainable_variables。 但是,急切模式可以与显式创建的图形对象一起使用。在这种情况下,我认为它将存储变量列表。没有它,keras模型对象将是变量的唯一显式存储。