반응형

전체 글 45

[python] class 오버라이딩(overriding), 상속, super()

안녕하세요, 파이썬은 객체지향 언어이다 보니 class을 사용하여 코딩을 하는 경우가 많습니다~ class을 사용하다보면 상속 및 오버라이딩을 종종 접하게 되는데 해당 내용에대해서 간단하게 알아보겠습니다. 상속와 오버라이딩 둘다 포함되어있는 예제코드를 우선 살펴보겠습니다. 그림을 보시면 parent()가 부모 클래스이고 daughter() 클래스와 son() 클래스가 parent클래스를 상속받는 것을 확인 할 수 있습니다. 그리고 son(), daughter() 클래스를 인스턴스화 시키고 실행 시켜본 결과 오버라이딩된 결과 또는 상속받은걸 그대로 내뱉는 결과들을 확인 하실 수 있습니다~ 그 다음으로, super()에 대해서도 같이 알아보겠습니다. super명령어는 상속 관계에서 상속의 대상인 부모 클래스..

python 2021.11.09

torch.nn 과 torch.nn.functional 차이점!

안녕하세요~ pytorch 를 활용한 레퍼런스 코드를 보기위해 git에 돌아다니다보면 layer 및 activation Function 을 구현할 때 torch.nn.Dropout 를 쓰는 경우도 있고, torch.nn.functional.dropout 을 쓰는 경우도 있습니다. 같은 dropout인데 왜 두개나 있는지 궁금해서 구글에 서칭해본 결고 다음 블로그에서 잘 설명해주어서 도움이 되었습니다. https://cvml.tistory.com/10 당연 영어 사이트가 저를 맞이할줄 알았는데 한글로 잘 정리해줘서 고마웠습니다.(감사합니다~~) ##torch nn import torch import torch.nn as nn loss = nn.CrossEntropyLoss() input = torch.ra..

AI 2021.11.08

5x5 Conv 를 3x3 Conv2개로 대체 효율

안녕하세요 ~ VGG에서 사용한 5x5 Conv를 3x3Conv 2개로 대체했을 때 왜 파라미터가 수가 적어진다고 하는지 알아보겠습니다. 우선 가정을 해보십다~ output Feature map size: HXW, input Channel, output Channel = 1 라고 생각하면 쉬울거 같아요. 파라미터 및 곱셈 연산량 비교 5x5 Conv 3x3 Conv + 3x3 Conv Params 25 18 Multiplication 25HW 18(HW + H + W +2) 계산을 해보면 다음과 같은 결과를 얻을 수 있습니다. 따라서 항상 5x5 Conv가 3x3 Conv + 3x3 Conv보다 파라미터수는 적음을 확인 할 수 있지만, 연산량에 있어서는 항상 3x3Conv + 3x3Conv가 더 좋다고 ..

AI 2021.11.08

DataLoader worker is killed by signal: Killed 에러

안녕하세요 학습 도중에 갑자기 DataLoader workter (pid) is killed by signal: Killed. -> DataLoader workter (pid) exited unexpectedly 라는 에러문구가 발생했습니다. (아래 그림 참조) 이런 문제가 왜 생기는지 검색해본 결과 메모리 부족이라는 의견이 많았습니다. -> 보통 블로그에서는 dataloader에서 num_workers 부분을 0으로 수정해서 사용하라는 대답이 많았습니다. 저의 경우 해당 방법으로는 해결이 되지 않았고 num_workers를 0으로 세팅하면 학습속도가 엄청 느려지기만 했습니다,, 전에 사용하던 COCO dataset이나 PASCAL VOCdataset에서는 정상적으로 동작하였던 코드였기에 바뀐거라고는 새..

python 2021.11.04

[Python] 여러 GPU중 특정 GPU만 사용하고 싶을 때

안녕하세요~ 저의 경우 GPU가 4개 달린 환경에서 학습을 진행하고 있습니다~ 학습 코드에서 GPU할당을 자동으로 나눠서 할당 하게끔 짜여있지만 종종 하나의 GPU에서만 동작 시키고 싶을 때가 있을겁니다. 그럴 경우 CUDA_VISIBLE_DEVICES = x 를 사용하시면 됩니다. 예를 들어 4개의 GPU중 4번 째 GPU만 사용하고 싶다! 그러면 CUDA_VISIBLE_DEVICES=3 python3 ~~ 다음과 같이 사용하시면 됩니다~ 읽어주셔서 감사합니다

python 2021.11.03

[python]확장자 일괄 변경

안녕하세요 작업을 하다 보면 이미지 확장자명을 하나로 통일시켜야 할 때가 있어요~ 이미지 파일 개수가 수만개 있으면 일일이 바꾸는데 시간이 오래 걸리니까 코드 몇 줄을 사용해서 해당 작업을 하는 편입니다~ 이번에 가져온 예제는 특정 디렉터리에 있는 파일을. png확장자에서. jpg로 바꿔주는 코드를 짜 봤어요~ 해당 코드에 주석으로 설명도 적어놨으니까 이해를 하고 실무에서 한번 사용해보세요~ import os import glob files = glob.glob("./JPEGImages/*.png") #원하는 디렉토리 설정 for name in files: if not os.path.isdir(name): #디렉토리는 포함 x src = os.path.splitext(name) #확장자와 파일명 구분 o..

python 2021.11.03

[논문리뷰] DropBlock: A regularization method forconvolutional networks

이번에 DropBlock논문을 읽고 이해한대로 써볼려고 합니다.. 잘못된 내용이 있을 시 댓글 달아주시면 감사하겠습니다 우선 논문내용 중에 중복된 내용은 skip을 하며 글을 써볼려고 합니다 Abstract Deep neural networks은 over-paramerterized 와 많은 양의 노이즈와 regularizatoin (weight decay, dropout)와 함께 학습할 때 잘 작동하는 경우가 있습니다. dropout이 regularization technique으로 fully connected layers에서 많이 사용되는 반면, convolutional layers에서는 효과적이지 않습니다. 왜냐하면 convolutional layers의 activation units가 공간적으로 상..

AI 2021.11.02

json to xml convert 작업[ 작성중..]

안녕하세요 데이터셋을 모으다보면 제가 사용하고있는 데이터로더의 형태와 맞지않은 annotation 파일들을 볼 수가 있습니다. 그런 경우 dataloader를 annotation파일에 맞게 수정을 진행을 하거나 annotation 파일 형식을 현재 제가 사용하고있는 dataloader형식에 맞추어 사용하고 있습니다. 이번에는 후자의 경우에 어떤식으로 바꾸는지 알아보는 시간을 가지도록 하겠습니다. 우선 제가 다운받은 데이터셋의 annotation 파일의 형태를 살펴봐야합니다. 그리고 제가 사용하고있는 dataloader는 어떤 데이터를 필요로 하는지 살펴봐야할텐데요. 여기서 제가 원하는 데이터는 category, box2d, name정도 입니다. import os import json from xml.et..

python 2021.10.22

매크로 함수의 문제점

매크로 함수는 컴파일 이전에 코드가 변환되기 때문에 일반 함수보다 속도가 빠릅니다. -> 일반 함수가 가지고 있는 호출 과정이 없기 때문에 속도에서 좋은 성능을 나타낸다. 하지만 매크로 함수로 인해 디버깅의 어려움이 있을 수도 있습니다. ex) #define max(x,y) ((x)>(y)?(x):(y)) 이는 max함수를 매크로 함수로 정의한 것입니다. 1. 첫번째 문제 하지만 개발자의 실수로 바깥 괄호를 빠뜨리고 매크로 함수를 정의했다고 가정하게된다면 #define max(x,y) (x)>(y)?(x):(y) "2*max(3,2)" 이라는 수식은 -> "2*(3)>(2)?(3):(2)"로 변환하게 되고 결과 값은 3이 나옵니다. 6을 예측했지만 3이나오게 되고 이를 디버깅하기는 찾기가 어렵습니다. 2..

알고리즘 2021.07.19
반응형