PyTorch eval()이란?

김유상·2022년 12월 22일
0
post-custom-banner

eval 함수는 매개변수로 받은 문자열 형식의 Expression을 실행하는 기능을 가지고 있다.

이때 문자열은 python으로 해석 가능해야만 실행이 가능하다. 당연히 모듈에 대한 내용이 포함된 경우 import 해줘야 한다.
import 했어도 intellisense가 실제로 사용하고 있는지 감지하지 못하기 때문에 사용 시에 주의해야 한다.

model = eval('models.'+cfg.MODEL.NAME+'.get_pose_net')(cfg, is_train=False).eval().cuda()
model = models.pose_hrnet(cfg, False).eval().cuda()

위 코드의 1,2번 라인은 같은 의미의 코드이다. cfg 때문에 적절한 예시라고 생각이 들지 않지만 이렇게 함수를 매개변수와 함께 호출하는 것도 가능하다.
정확히는 함수만 호출하고 매개변수는 eval 바깥에서 전달해준 것이다. eval은 단지 models.pose_hrnet이라는 함수를 불러오는 역할만 수행했다.

이렇게 어떤 값을 불러오는 수준의 사용은 문제가 되지 않지만, 값을 변경하는 경우나 input 문자열 자체를 외부의 output으로 사용하는 일은 (보안 상의 이유로) 있으면 안될 것 같다.

Referenced: https://blockdmask.tistory.com/437

profile
continuous programming
post-custom-banner

0개의 댓글