본문 바로가기

반응형

카테고리

(177)
[ResNet] resenet이 degradation에 robust한 이유 고찰 이 글에서는 gradient vanishing문제와 resnet이 gradient vanishing문제에 robust한 이유에 대해서 고찰하였다. plain net 일반적인 plain net에서 backpropagation문제는 다음과 같이 수식으로 나타낼 수 있다. 그리고 위 그림과 수식을 참고하면 gradient는 앞 layer에 의존적이라는 것을 직관적으로 이해할 수 있다. gradient vanishing문제는 이렇게 설명할 수 있다. 앞 layer에서의 backpropagation 결과가 0이 가깝다면 그 뒤는 자연스럽게 모두 0에 가까워질 수 밖에 없다. 만약 위의 수식에서 dx4/dz3 가 0에 가깝다면 수식 전체는 반드시 0으로 수렴한다. 그러나 resnet에서는 다음과 같이 network..
[파라미터 수 계산법] conv layer 파라미터 계산법 convolution layer 간단 설명 컨볼루션 연산을 하게 되면 input 의 1개의 channel에 대해서는 1개의 convolution filter로만 연산하게 된다. 따라서 해당 filter가 강조하고자 하는 특징이 활성화돼서 output channel로 나가게 된다. 그렇기 때문에 여러개의 convolution filter를 사용해서 연산하는건데 이런 과정을 거치면 output channel여러개는 각각 서로 다른 특징에 대해서 활성화 된다. 예시 human pose estimation을 위해 convolution을 적용할것이고 하나의 convolution layer를 거치고 난 output channel들을 살펴본다고 가정하자. 이 때 output channel들은 서로 다른 특징에 대해 ..
[Error 기록] RuntimeError: Found 0 files in subfolders of: oxford-102/jpg/Supported extensions are: .jpg,.jpeg,.png,.ppm,.bmp,.pgm,.tif,.tiff,.webp RuntimeError: Found 0 files in subfolders of: oxford-102/jpg/ Supported extensions are: .jpg,.jpeg,.png,.ppm,.bmp,.pgm,.tif,.tiff,.webp 이 에러는 해당 subfolders안에 .jpg,.jpeg,.png,.ppm,.bmp,.pgm,.tif,.tiff,.webp 같은 형식의 파일이 없다는 의미인데, 쉽게 말해서 데이터를 처리하라는 명령어를 줘놓고서는 데이터를 주지 않았다는 에러이다. 이런 에러는 주로 데이터전처리 과정에서 에러가 난다. 아래는 해당 에러가 발생한 부분이다. 해결법 : 해당 subfolder에 데이터를 잘 갖다놔주면 된다.
[Error 기록] RuntimeError: CUDA out of memory. Tried to allocate 2.39 GiB (GPU 0; 10.92 GiB total capacity; 4.87 GiB already allocated; 2.05 GiB free; 7.54 GiB reserved in total by PyTorch) 원인 : GPU가 한번에 감당하는 연산이 너무 많아서? 인것같다 해결책(from stack overflow) : batch사이즈를 줄이면 해결이 된다고 한다. 특히 나는 eval_net에서 문제가 생긴다. eval에서 마지막에 한번에 ypreds를 다루는 부분에서 문제가 생기는데, 이 부분은 batch단위로 데이터를 다루는게 아니라 test데이터를 모두 한꺼번에 처리하는데 이 때 GPU가 감당할 수 있는 양을 넘은 것으로 보인다. 위 코드의 ypreds부분에 에러가 생긴다. ypreds.append(y_preds)로 데이터를 모아둔 후 torch.cat으로 한번에 처리하기엔 GPU가 감당할 수 있는 데이터용량을 넘긴것 같다.
[python] class 기본 메서드 __init__, __getitem__ __init__, __getitem__은 기본적으로 class에 내장되어 있는 메서드로써 호출되는 방식이 다른 일반 메서드와는 다르게 정해져있다. __init__은 클래스를 생성할 때 실행되는 생성자이다. __getitem__은 클래스의 인덱스에 접근할 때 자동으로 호출되는 메서드이다. 위 예시를 보면 a = TEST()에서 생성자가 호출된것을 알 수 있고 a라는 객체에 인덱스접근할 때(a[3], a[4], a[5])마다 '__getitem__메서드 호출' 이 출력되는걸 보아 __getitem__메서드가 호출되는 것을 알 수 있다. 이 두 메서드를 보면 다른 __(???)__ 꼴의 메서드들도 매개인자로 호출이 아닌, 정해진 방식대로 호출하면 동작할 것이라는 것을 예상할 수 있다.
[github] pull 명령어 사용하기 git pull 사용법 git pull git pull origin mastser 이 때 pull은 merge방식과 rebase방식이 있다. merge방식은 알다시피 local의 내 코드와 원격저장소내의 코드를 자동으로 합쳐주면서 pull하는 기능이다. rebase방식은 다음에 설명을... 참고 사이트 : victorydntmd.tistory.com/74
[github] git remote 설명, repository 생성 후 원격 저장소에 올리기 로컬 저장소를 원격저장소에 연결하는법 git remote는 원격저장소를 관리할 수 있는 명령어 입니다. git remote add origin https://github.com//로 origin이라는 이름으로 원격 저장소 주소를 등록합니다. ------------ 23.07.13.목 수정 repository 생성 후 원격 저장소에 올리기 git remote 를 사용하는 경우 : 새로운 레포를 생성하고, 이 내용을 원격에 올리고 싶을때 사용할 수 있다. 물론 이 경우 외에 다른 경우도 있을듯.. 아래는 로컬에서 새로운 레포 생성 후 원격에 올리는 과정이다. 로컬에서 레포지토리를 생성 후 커밋한다. # 깃 생성 git init # 레포지토리에 파일 추가 ''' blah blah blah ''' # 커밋 gi..
[github] branch 관리하기 branch 통합하기 (Fast-forward) git에서 origin/main 에서만 issue들을 commit하다가 origin/main의 끝단에서 branch를 파게됐다. 이 branch 이름을 "visualize"라고 하자. visualize branch에서 작업하던것을 origin/main으로 다시 병합해서 origin/main 하나만 관리하고 싶을 때는 다음과 같은 명령어를 이용하면 된다. git checkout main # main 으로 HEAD 이동 git merge visualize Fast-forward 라는 결과문구와 함께 과정이 수행되는 것을 볼 수 있다. Fast-forward 란 단순히 최근 branch가 과거 branch에서 파생됐을 뿐이고 복잡한 병합과정 없이 이 둘을 하나의..

반응형