在我看到的有关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
给出了空白列表。
答案 0 :(得分:1)
据我所知,TensorFlow中的Eager模式将有关模型的信息存储在对象中,例如tf.keras.Model
或tf.estimator.Estimator
中。在没有图的情况下,您只能在那里获取变量列表,例如使用tf.keras.Model.trainable_variables。
但是,急切模式可以与显式创建的图形对象一起使用。在这种情况下,我认为它将存储变量列表。没有它,keras模型对象将是变量的唯一显式存储。