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
[Python] 딕셔너리 수정 중 발생하는 에러 및 해결 방법 RuntimeError: * during iteration
안녕하세요. Python에서 dict (dictionary)를 수정하는 중에 발생할 수 있는 에러를 해결하는 방법에 대해 소개해드리겠습니다. How to solve “RuntimeError: * during iteration” in python? 먼저 어떤 에러가
jeonghyeokpark.netlify.app
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 |