Closed ghost closed 4 years ago
line 310에 targets를 넘겨주면 안됩니다.
티쳐포싱이란 개념에 대해서 검색해보시거나 전에 제가 정리한 글이있습니다. 링크
targets이란 결국 ground truth (정답) 인데, 트레이닝시에는 빠르고 정확한 학습을 위해 정답 레이블을 다음 입력으로 넣어주게 되지만, validate나 evaluate시에는 실제 성능을 확인하고자 진행하는 과정이므로 티쳐포싱을 사용하지 않습니다. 티쳐포싱을 사용하게 되면 좀 더 정확하게 예측하게 될 것이므로 편법이라고 볼 수 있습니다.
그리고 주석 다신 부분인
targets = targets[:, 1:] # train과 같은 형태로 변경
같은 경우는 같은 형태로 변경하는 과정이 아니라 sos 토큰을 없애주는 과정입니다.
targets에는 sos 가 나 다 라 마 바 사 . . . eos 와 같은 형태인데, 입력과 아웃풋의 이상적인 형태는 다음과 같습니다.
<sos> 가 나 다 라 마 바 사 . . .
가 나 다 라 마 바 사 . . . <eos>
criterion에는 output의 이상적인 형태와 비교해야 하므로
데이터셋은 어떤 데이터셋을 쓰시는지 몰라서 어떻게 수정해야할지는 말씀드리기 애매하나,
validate시에 loss 계산을 따로 하지 않고 cer만 측정하시게 되면 문제없이 넘어가지 않을까 싶습니다.
데이터셋은 aihub와 동일한 형태로 진행했는데 그러네요 ㅠ 따로 더 살펴봐야겠네요! train은 문제가 없는데 validate만 문제가 생기네요ㅠ 말씀하신대로 loss를 제거했을때는 문제없이 잘 돌아갑니다! 자세한 설명 감사드립니다!
안녕하세요. 매번 업데이트 해주시는 코드 열심히 따라가면서 공부하고 있습니다! 감사합니다! 제가 Aihub 데이터셋이 아닌 다른 데이터셋을 사용해서 train, validate를 시도해보고 있는데요. 아래와 같은 에러가 발생하였습니다.
확인해봤을때 supevised_trainer.py의 validate 함수에서 324번째줄의 logit과 target의 shape이 맞지 않더라구요.
그래서 코드를 보고 있는데 310번쨰 줄에 targets이 들어가있지 않던데 targets을 추가하는게 맞지 않은가해서요. 크게 변경없이 제 나름대로 코드를 다시 짜봤는데 문제가 없는지 확인 부탁드려도 될까요?
바쁘실텐데 읽어주셔서 감사합니다!