tensor 에서 detach()를 대체할 수 있는 방법과 역전파 방법

네트워크 A, B가 있고
네트워크 A에서 나온 출력 값 x가 있다고 가정하였을 때,
해당 출력값 x를 numpy로 바꾸어 일종의 연산을 수행한 뒤 네트워크 B 로 넣어줘야합니다.

이를 위해, output_A = x.deatch().cpu().numpy()를 수행하는데요,

여기서 저는 역전파를 네트워크 A 까지 하기를 바랍니다.

그런데 detach는 역전파가 수행되지 않고, 찾아보니
clone()의 경우에는 네트워크의 마지막 layer에서 나온 결과값은 grad가 없다고 안된다고 하네요…

이럴 경우에, 네트워크 A에서 나온 출력값 x를 numpy로 바꾼 뒤, 역전파도 가능하게 할 수 있는 방법이 있을까요?

안녕하세요
지금 원하시는 함수가 외부에 있어서 numpy로 변경을 하시는 것 같습니다.
아시는 바와 같이 이 경우에 자동 미분이 동작하지 않기 때문에 가능하시면 텐서로 해당 기능을 구현하시는 것이 좋습니다.

부득이하게 연산을 파이토치 외에서 하게 될 경우에는 로스에서 해당 함수 이전까지 그레디언트를 직접 계산해서 전달해주어야 합니다.
제가 알고 있는 이런 예제들은 CTC, transducer Loss 같은 것들이 있는데요. C++로 함수를 구현하고 그레디언트를 직접계산해서 파이토치 텐서 형태로 포맷을 해서 전달합니다. 사실 cudnn 함수들도 이런 식으로 구현이 되어 있는 것이지요.

1개의 좋아요

이 글은 마지막 댓글이 달린지 오래(30일)되어 자동으로 닫혔습니다. 댓글 대신 새로운 글을 작성해주세요! :slight_smile: