【发布时间】:2023-03-12 04:54:01
【问题描述】:
我正在使用tf.estimator API 来训练模型。
据我了解,model_fn 定义了计算图,它根据mode 返回不同的tf.estimator.EstimatorSpec。
在mode==tf.estimator.ModeKeys.TRAIN 中,可以指定在每次训练迭代时调用train_op,这反过来会更改tf.Variable 的trainable 实例,以优化一定的损失。
让我们调用 train_op optimizer,变量 A 和 B。
为了加快预测和评估,我想有一个辅助的不可训练的 tf.VariableTensor C,完全依赖于已经训练好的变量。因此,该张量的值将是可导出的。这个张量不影响训练损失。假设我们想要:
C = tf.Variable(tf.matmul(A,B))
update_op = tf.assign(C, tf.matmul(A,B))
- 我尝试了什么:
在EstimatorSpec 中将tf.group(optimizer, update_op) 传递为train_op 效果很好,但会大大减慢训练速度,因为train_op 现在每次迭代都会更新C。
因为C 仅在评估/预测时需要,所以在训练结束时调用update_op 就足够了。
是否可以在训练结束时分配一个变量 tf.estimator.Estimator?
【问题讨论】:
-
那你为什么要把它传给估计器呢?只需在训练结束时手动运行一次 update_op。
-
计算图在
model_fn中定义,所以是update_op。model_fn作为参数传递给tf.estimator.Estimator的 init 方法。在对estimator.train的调用完成后,我看不到任何运行update_op的简单方法。提醒一下,我将(参考)[tensorflow.org/get_started/custom_estimators] 放在 Estimator API @ThomasPinetz
标签: python tensorflow machine-learning deep-learning