TF实现多minibatch梯度累加及反向更新
生活随笔
收集整理的這篇文章主要介紹了
TF实现多minibatch梯度累加及反向更新
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考鏈接:
TF中optimizor源碼:
https://blog.csdn.net/Huang_Fj/article/details/102688509
如何累加梯度進行反向:
https://stackoverflow.com/questions/46772685/how-to-accumulate-gradients-in-tensorflow
https://blog.csdn.net/weixin_41560402/article/details/106930463
問題背景及解決:
在顯卡資源有限的情況下,想要增加batch_size的大小,于是可以想到將一個大的batch分解成許多的mini_batch前傳,并同時將梯度累加,達到batch_size大小之后反向跟新梯度。
操作也很簡單,實際上就是將optimizor分解為compute_gradients和apply_gradients兩步,并在第一步之后累加梯度即可,具體可以看參考鏈接里面的optimizor解析,這里也貼一下:
如何進行梯度累加,并更新梯度可以參考上面兩個鏈接,比較詳細
def minimize(self, loss, global_step=None, var_list=None,gate_gradients=GATE_OP, aggregation_method=None,colocate_gradients_with_ops=False, name=None,grad_loss=None):grads_and_vars = self.compute_gradients(loss, var_list=var_list, gate_gradients=gate_gradients,aggregation_method=aggregation_method,colocate_gradients_with_ops=colocate_gradients_with_ops,grad_loss=grad_loss)vars_with_grad = [v for g, v in grads_and_vars if g is not None]if not vars_with_grad:raise ValueError("No gradients provided for any variable, check your graph for ops"" that do not support gradients, between variables %s and loss %s." %([str(v) for _, v in grads_and_vars], loss))return self.apply_gradients(grads_and_vars, global_step=global_step,name=name)?
總結
以上是生活随笔為你收集整理的TF实现多minibatch梯度累加及反向更新的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 找到字符串中所有字母异位词—leetco
- 下一篇: vscode could not est