분류 전체보기
-
File ObjectsPython 2020. 8. 22. 13:52
with open('path_to_file', 'r') as f: # Do something with f 위 사용법 이외의 사용법외의 다른 유용한 method, attribute를 찾아봤다 1-1. 파일 내용 가져오기: read() with open('test.txt', 'r') as f: f_contents = f.read() print(f_contents) 1-2. 글자수만큼 가져오기: read(num_characters) with open('test.txt', 'r') as f: size_to_read = 10 f_contents = f.read(size_to_read) print(f_contents) 1-3. 파일 시작 지점으로 돌아오기: seek(0) with open('test.txt', 'r..
-
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..
-
argparse 모듈로 커맨드라인 인자 가져오기Python 2020. 5. 28. 10:12
파이썬에서 커맨드라인 인자를 가져올때, 그동안 Copy&Paste 만 하고 문법을 제대로 공부하지 않았다. 그래서 이번에 argparse 모듈로 커맨드라인 인자를 파싱하는 방법을 알아봤다. 파이썬 공식 페이지에 Argparse Tutorial이 있어서 이걸 읽어봤다. 먼저 아래와 같은 간단한 샘플 코드 및 실행 결과가 나온다. import argparse parser = argparse.ArgumentParser() parser.add_argument("echo") args = parser.parse_args() print(args.echo) $ python3 prog.py usage: prog.py [-h] echo prog.py: error: the following arguments are requ..
-
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..
-
(A,) <-- 콤마는 왜쓰는걸까? (1D Tuple)Python 2020. 5. 23. 17:19
파이토치로 코딩을 할 때, 가끔 이런 코드와 마주친다. torchvision.transforms.Normalize((0.1307,), (0.3081,)) Normalize 클래스의 인자로 두개의 숫자를 넣는것은 이해가 되는데, 괄호 안에 콤마(',')를 넣는것은 무슨 의미일까? 그냥 편하게 이런식으로 적으면 안되는걸까? torchvision.transforms.Normalize(0.1307, 0.3081) 구글링을 해보니 파이썬 문법중 튜플이라는 타입이 있는데, 원소가 1개인 튜플을 정의하려면 괄호안에 콤마(',') 를 하나 적어야 한다고 한다. 그냥 괄호만 적으면 튜플이 아닌 숫자 타입으로 인식되기 때문. Normalize 클래스는 다차원 텐서를 지원하기 위해서, 튜플 타입으로 ave, std 값을 입..