본문 바로가기

반응형

연구

(58)
[data loader] 데이터 불러올때 경로설정(dir path) 및 데이터폴더 정리 pytorch로 연구할 때, data loader부분소스코드를 짜는것과 데이터준비하는것만 해도 절반은 했다는 말이 있다. 그 만큼 data를 잘 불러와서 처리하는게 중요하고 어렵다는 말인데 나중에 겪을 시행착오를 위해 미리미리 쉬운 케이스부터 기록해놓겠다. 아래는 Bulat의 "How far are we from solving the 2d and 3d face alignment problem" 논문에서 제공하는 코드를 실행하는 부분 중에서도 데이터를 가져오는 파일의 코드이다. class facedb는 data를 load하는 기능의 클래스이다. 이 글에서 더 이상 자세하게 볼 필요는 없다. 오픈소스코드에서는 저렇게(위 사진처럼) 경로지정하는 부분까지 제공해주는데 이 때, 경로를 어떻게 지정해주어야 하며 다..
[model 저장] 훈련중인/훈련이 완료된 모델 저장하기 실험을 하다보면 훈련이 완료되거나 훈련중인 모델을 저장해야할 일이 생긴다. 아래는 모델을 저장하는 예시코드이다. res20 = ResNet(20) res20.to("cuda:0") train_net(res20,trainloader, testloader, n_iter=80 ,device="cuda:0", lr=0.1, train_err=res20.train_err, val_err=res20.test_err) # res20 저장 torch.save(res20,'./model_res20') 아래는 저장한 모델을 불러오는 코드이다. 모델을 불러오면 바로 그 상태에서 training을 계속할 수 도 있고 평가할 수 도 있으며, 모델에 구현되어 있는 기능을 자유롭게 사용할 수 도 있다. model = my_resn..
[Error] TypeError: conv2d(): argument 'input' (position 1) must be Tensor, not NoneType TypeError: conv2d(): argument 'input' (position 1) must be Tensor, not NoneType 원인 : nn.Conv2d()에 input type으로 Tensor type이 들어가야 하는데 NoneType이 들어가고 있다는 말이다. 왜 NoneType이 들어가고 있는지 코드에서 확인해보아야 한다. self.layer2의 정의를 살펴보니 ResidualBlock 클래스의 내부를 보아야 했다. ResidualBlock class의 forward이다. 문제를 확인할 수 있겠는가? forward()의 return 을 설정해두지 않아서 NoneType 에러가 발생한 것이다. 해결법 : forward()에 return을 달아두자...
[error] RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same RuntimeError: Input type(torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same 원인 : 에러명에서도 알 수 있듯이 하나는 input type과 weight type이 동시에 cuda이어야 하는데 그게 아니라서 그렇다. 다시 말해 input type(x,y)는 cuda를 먹였는데 weight type(신경망)은 cuda를 먹이지 않아서 생기는 에러. 즉 x = x.to("cuda:0") y = y.to("cuda:0") 를 했지만 net.to("cuda:0") 를 하지 않아서 그렇다. 해결책 : net.to("cuda:0") 를 넣으면 된다.
[tensor] tensor.size() 에 관하여 tensor.size()했을 때 나오는 각 숫자들의 의미에 대해서 알아보자. 이미지 데이터를 batch단위로 묶어서 학습한다고 생각해보자. net에 들어가기 전에 tensor의 형태를 출력하면 다음과 같이 나온다. torch.Size([128, 1, 28, 28]) 이 때 각각의 숫자가 의미하는게 무엇인지 살펴보자. 128 : mini-batch size(데이터 한 묶음당 들어있는 데이터쌍(x-y) 개수) 1 : channel size 28 : img size 28 : img size 이 데이터묶음을 net에 넣고 연산하여 Convolution layer를 모두 거치고 나오면 다음과 같은 형태로 바뀐다. torch.Size([128, 64, 4, 4]) 당연히 batch size 는 변하지 않는다. en..
[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에 데이터를 잘 갖다놔주면 된다.

반응형