728x90
반응형
신경망의 특정 레이어를 삭제하려 할 때, model.state_dict()로 pre-trained model을 받아오고, 레이어를 삭제하려는 도중 발생한 에러. Dictionary 가 반복 실행(즉, for문) 안에서 변경되면서 발생하는 에러. For문 입장에서는 삭제한 key 'rec_head.encoder.emb'가 있어야 하는데 중간에 변경되서 없어졌다고 경고를 보내는 꼴이다.
for key, value in checkpoint['state_dict'].items():# For문 하단의 삭제는 문제가 없는데, 다음 iteration을 돌 때 에러가 발생
if 'rec_head.encoder.emb' in key:
checkpoint['state_dict'].pop(key)# 삭제까지는 정상적으로 되는데,
print(key)
이를 피하기 위해서는 for문에 copy()함수를 사용해서 아래처럼 기존 dict는 수정되지 않도록 변경해주면 된다.
for key, value in checkpoint['state_dict'].copy().items():# copy문장 추가
if 'rec_head.encoder.emb' in key:
checkpoint['state_dict'].pop(key)
print(key)
출처 : https://jeonghyeokpark.netlify.app/python/2020/12/17/python2.html
728x90
반응형
'사소한 Tip . 오류 해결법' 카테고리의 다른 글
[Tensorflow] TFRecord 형식 데이터 처리 (0) | 2021.11.24 |
---|---|
CMD출력 Warning 삭제(in.Tensorflow) (0) | 2021.11.24 |
DataLoader Epoch에 따라 Random Subset Sampling (0) | 2021.11.03 |
Ubuntu, Command로 하위 파일, 하위 디렉토리 개수 세기/ 여러 폴더 내 파일 개수 count (0) | 2021.11.03 |
jupyter notebook dashboard - voila (0) | 2021.11.01 |