만약 TF computational graph에 custom function과 custom gradient를 넣고 싶으면 어떻게 해야할까?
아래 gist에 해당 내용을 정리해보았다.
https://gist.github.com/sjchoi86/01d8957cfdeb39d55e7dd42e8836b2ab
결국 TF 문법이 어려웠던 것인데,
- 기본적인 tf.py_func은 gradient가 None이 되어서, 만약 forward path만 신경을 쓰고 싶을 때 사용하면 편한 것 같아요. 특히나 graph에 있는 tf Tensor를 sess.run 등으로 뺴오지 않아고 py_func으로 처리를 하면 해당 함수 안에서는 ndarray가 되거든요.
- 만약에 gradient도 custom으로 주고 싶다면 tf.RegisterGradient를 해주고 (unique한 이름으로), gradient_override_map으로 gradient를 알려줘야해요. 아래 gist에서는 grad_wrapper가 그 역할을 해줍니다. 기본적으로 grad_wrapper의 op와 grads는 tf Tensor가 되므로 여기 안에서 tf.py_func을 써서 numpy로 정의한 custom gradient function을 call하게 됩니다. (custom_func_derivatives)
아직도 어렵다.
'Enginius > Python&TensorFlow' 카테고리의 다른 글
Install PyTorch for LCRnet using KB (0) | 2019.04.30 |
---|---|
vs code로 서버 접속하기 (0) | 2018.09.06 |
MuJoCo Ant-V2 + PPO implementation (0) | 2018.07.03 |
Install bullet3 and MuJoCo in Macbook (0) | 2018.07.01 |
Install MuJoCo (카브) (0) | 2018.06.22 |