PyTorch
-
torch.nn.Module.parameters() 는 정확히 어떤 값을 돌려줄까?PyTorch 2020. 5. 28. 10:13
신경망 파라메터를 optimizer에 전달해 줄 때, torch.nn.Module 클래스의 parameters() 메소드를 사용한다. optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9) 위와 같은 경우, parameters()는 정확히 어떤 값들을 반환해주는지 궁금해졌다. 공식 문서를 보면, parameters() 메소드는 모듈의 파라메터들을 iterator로 반환한다고 적혀있다. Example 부분을 보면 파라메터 오브젝트의 타입이 torch.Tensor인걸 알 수 있다. 파라메터 오브젝트에 관한 더 자세한 설명 설명은 공식 문서의 torch.nn.Parameter 클래스 부분에 나와있는데, torch.nn.Parameter 클래스는 to..
-
torch.optim.lr_scheduler를 이용하여 learning rate 조절하기PyTorch 2020. 5. 24. 17:03
요즘 knowledge distillation 논문[Hinton14]을 읽고 있다. 여기에 나온 대로 3층 퍼셉트론을 구현해서 MNIST 데이터를 학습시켜봤는데, 적혀있는 것 보다 낮은 성능이 나왔다. 네트워크 구조는 제대로 구현한 것 같은데, optimizer 옵션이 다른것이 원인인듯 했다. 그래서 learning rate, batch size 등을 논문에 나온 내용과 똑같이 수정해보려고 한다. 사실 자세한 optimizer 옵션은 이전 논문[Hinton12]에 나와있는데, 다음과 같이 적혀있다. 위 수식의 핵심은, learning rate과 momentum을 epoch수에 따라 변화시키는 것이다. learning rate : 10에서 시작해서, 각 epoch마다 0.998을 곱하여 점점 줄인다 mom..
-
GPU 사용하기PyTorch 2020. 5. 23. 22:55
파이토치에서 GPU를 이용한 forward/backward 연산을 하는 방법을 알아봤다. 사용할 GPU정보를 입력하여 torch.device() 클래스를 생성한다 device = torch.device('cuda') torch.nn.Module 클래스의 to() 메소드를 이용하여 신경망 파라메터 변수들을 device에 옮긴다 model.to(device) 학습 진행시, 넣어줄 입력 텐서도 device로 옯겨준다 x, y_pred = data[0].to(device), data[1].to(device)
-
nn.Dropout 으로 dropout 레이어 넣기PyTorch 2020. 5. 23. 20:36
dropout은 신경망의 일반화 성능을 높이기 위해 자주 쓰이는 테크닉 중 하나이다. 신경망 구조 학습시, 레이어간 연결 중 일부를 랜덤하게 삭제하면, 여러개의 네트워크를 앙상블 하는 효과를 낼 수 있고, 이로 인해 일반화 성능이 높아진다고 한다. 파이토치에서는 nn.Dropout 클래스를 통해 간단히 dropout 레이어를 추가할 수 있다. nn.Dropout(p=0.5) 그런데 신경망의 어떤 부분에 dropout을 적용시키면 되는걸까? Hinton교수의 논문을 보니, 다음과 같이 hidden unit에 적용하면 된다고 한다. 참고: Hinton et. al. "Improving neural networks by preventing co-adaptation of feature detectors". 20..
-
파이토치 모델 파라메터 저장/불러오기PyTorch 2020. 5. 23. 16:52
파이토치로 신경망 모델 파라메터를 학습시키는데는 시간이 많이 걸린다. 그래서 한번 학습해서 얻어진 파라메터를 소중히 보관해야하는 방법을 알아봤다. 1. 저장하기 torch.save(model.state_dict(), 'PATH.pth') torch 모듈의 save() 함수와, torch.nn.Module의 state_dict()함수를 사용한다. state_dict()는 모델의 파라메터를 dictionary 타입으로 반환해 주고, save() 함수는 인수로 들어온 오브젝트를 파일로 저장해준다. 2. 불러오기 model.load_state_dict(torch.load('PATH.pth')) model.eval() torch 모듈의 load() 함수와, torch.nn.Module의 load_state_dic..
-
torchvision으로 MNIST 데이터 로드하기PyTorch 2020. 5. 23. 01:45
MNIST 데이터를 쉽게 로드하기 위해서는 torchvision 모듈을 사용해야한다. torchvision에 관한 문서를 한번 읽어봤다. *참고: https://pytorch.org/docs/stable/torchvision/index.html torchvision — PyTorch 1.5.0 documentation Shortcuts pytorch.org TORCHVISION The torchvision package consists of popular datasets, model architectures, and common image transformations for computer vision. 그런데 특별한 설명은 없고, 컴퓨터 비전을 위한 이미지 변환, 네트워크 아키텍쳐, 데이터셋 등을 모아..
-
torch.optimPyTorch 2020. 5. 22. 22:25
신경망 훈련에는 SGD, Adam등의 상황에 따라 다양한 optimizer가 사용된다. 파이토치에서는 torch.optim 모듈을 이용해서 optimizer를 지정하는데, 베이스 클래스인 torch.optim.Optimizer를 상속받아서 여러가지 optimizer 클래스가 미리 구현되어있다. 1. optimizer 클래스 초기화 제일 중요한 매개변수는 신경망의 파라메터이다. Variable 타입의 파라메터들을 iterable 오브젝트로 넣어줘야한다. 그 외에는 각 optimizer 타입에 따라 learning rate, weight decay 등을 넣어주면 된다. optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9) optimizer = o..