이때 start_positions와 end_positions에 적용되는 torch의 함수 clamp는 기존의 변수에서 변경된 값을 출력할 뿐이고 변경된 값을 저장(할당)해주지는 않는다.
따라서 처음에 의도한 바와 달리 min = 0, max = ignored_index가 반영되지 않은 상태로 loss를 계산하고 있는 것이다.
clamp함수가 기존 변수의 값을 변경하지 않는다는 것을 확인하는 코드와 결과는 아래와 같다.
(실제 Trainer에서 돌아가는 것과 마찬가지로 3차원 tensor를 예시로 들었다)
기존 BaselineTrainer.py를 구성하는 코드의 일부는 아래와 같다.
이때
start_positions
와end_positions
에 적용되는 torch의 함수clamp
는 기존의 변수에서 변경된 값을 출력할 뿐이고 변경된 값을 저장(할당)해주지는 않는다. 따라서 처음에 의도한 바와 달리 min = 0, max = ignored_index가 반영되지 않은 상태로 loss를 계산하고 있는 것이다.clamp
함수가 기존 변수의 값을 변경하지 않는다는 것을 확인하는 코드와 결과는 아래와 같다. (실제 Trainer에서 돌아가는 것과 마찬가지로 3차원 tensor를 예시로 들었다)clamp 함수는
변수.clamp(최솟값,최댓값)
또는torch.clamp(변수,최솟값,최댓값)
형태로 쓰인다. 둘 중 어떤 것을 사용해도 원래 변수 example2의 값이 변경되지 않았다는 것을 확인할 수 있다.따라서
변수 = 변수.clamp(최솟값,최댓값)
또는변수 = torch.clamp(변수,최솟값,최댓값)
으로 변경해야 한다.