我最近在训练过程中遇到了性能瓶颈。我总是在摘要中添加大量的直方图。我想知道如果先计算梯度然后重新最小化损失,是否会计算两次梯度。一个简化的代码如下:
# layers...# optimizerloss = tf.losses.mean_squared_error(labels=y_true, predictions=logits)opt = AdamOptimizer(learning_rate)# collect gradientsgradients = opt.compute_gradients(loss)# train operationtrain_op = opt.minimize(loss)...# merge summary...
优化器中是否有直接使用梯度的最小化方法?比如使用opt.minimize(gradients)
而不是opt.minimize(loss)
?
回答:
您可以在计算完梯度后使用compute_gradients
,然后使用apply_gradients
,如下所示:
grads_and_vars = opt.compute_gradients(loss)train_op = opt.apply_gradients(grads_and_vars)