TensorFlow가 구글에서 머신 러닝을 위해서 제공하는 오픈 소스 라이브러리 이듯이 PyTorch 또한 FaceBook에서 제공하는 Deep Learning을 지원하기위한 오픈소스 플랫폼이다.
TensorFlow 나 PyTorch에서 Tensor 라는 용어가 나오는데 텐서는 NumPy 라이브러리에서 지원하는 어레이가 매트릭스나 벡터 변환 계산에 사용될 수 있지만 보다 더 머신 러닝에 특화한 리스트형 데이터로서 Classification을 위한 변환을 통해서도 고유한 데이터의 성격을 유지하는 특별한 데이터로 보면 될 것이다.
일반적으로 TensorFlow를 코드를 작성하는 과정에서도 NumPy 형 어레이 데이터와 Tensor 데이터들이 섞여서 나타나지만 각 데이터들의 특성이 어레이냐 또는 텐서냐에 따라서 적용해야 할 컴퓨팅 연산 명령들이 서로 다를 수밖에 없다.
특히 PyTorch도 가급적 NumPy 라이브러리 지원을 벗어나 Deep Learning이라든지 또는 GPU에 의한 고속 연산을 더욱 편리하게 할 수 있도록 기존의 TensorFlow와도 차별화된 텐서 연산 체계를 지원하고 있다.
많은 Deep Learnig 문제들이 이미 TensorFlow 나 Keras 또는 Scikit-learn 라이브러리를 사용하여 해결이 되어 왔지만 2018년경부터는 시대가 시대인 만큼 GPU 도입이 늘어나고 있으며 머신 러닝의 영역도 Deep Learning 과 Transfer Learning 을 포함하여 확대되고 있는 중이다. 특히 Transfer Learning 문제는 시급히 해결이 필요한 넘어야 할 장벽으로서 확실한 알고리듬의 출현이 있어야 할 분야이지만 현실적으로 그럴듯한 솔루션이 보이지 않는 상황이다.
PyTorch를 조금 입문해 보면 TensorFlow 와 무슨 점이 다른지 정확하게 알기는 어렵지만 적어도 제공하는 튜토리얼 예제들만 봐도 기존의 초보적인 머신 러닝 단계를 훌쩍 뛰어 넘어 2019년 시점에서도 쉽사리 해결하기 어려운 문제들로부터 시작하는 것으로 보아 머신 러닝의 새로운 원년이 시작되는 듯하다. 하지만 딱 부러지게 무어라 표현하기 쉽지 않으므로 PyTorch에서 제공하는 예제들 섭렵을 통해 그 특성을 알아나가는 것이 좋을 듯하다. 아울러 이미 구글 Colabo에서 GPU 연산 서비스를 무료로 제공하기 때문에 PyTorch를 자유자재로 익히는데 큰 도움이 될 것이다.
NumPy 라이브러리를 대체할 수 있는 torch 라이브러리를 사용하여 매트릭스와 텐서 사용법을 알아보자. 여기서 부터는 아나콘다에 별도로 설치된 torch 가상환경에서 작업하거나 아니면 Colabo에서 작업하면 된다. 단 아나콘다에 설치했던 TensorFlow 가상환경에서 torch 라이브러리 모듈을 불러 사용할 수는 없었으나 Colabo에서는 torch를 사용하든 TensorFlow를 불러 사용하든 문제가 되지 않는 것 같으니 참조하기 바란다.
PyTorch 기본 연산 튜토리얼
torch.rand(n,m)는 리스트형 매트릭스에 랜덤 number를 채워 초기화 시킨다. torch.empty(n,m)은 리스트형 매트릭스를 비우지만 들여다보면 말 그대로 비워진 것은 아니고 어떤 수가 들어 있다. 반면에 torch.zeros(n,m)을 사용해야 리스트형매트릭스를 0.0 으로 채울 수 있다.
실수 값들을 torch.tensor() 명령으로 텐서화 하자. 아울러 이 명령을 method화하여 적용해 보자. 튜토리얼에 있는 간단한 예제들인데 PyTorch 사이트에 별도로 명령들을 정리한 리스트는 따로 없는듯하며 TensorFlow 와 비슷한 개념으로 적용하면 될 것이다.
텐서 x의 사이즈를 출력해보자. 출력 결과 torch.Size([4,2])는 튜플(tuple)이므로 튜플 연산 법칙에 따른다. 참고로 NumPy 에도 어레이 사이즈를 알아보는 명령이 있다.
torch 텐서량이 직접적인 덧셈 연산이나 torch 덧셈 명령을 사용한 torch 텐서량들의 연산은 동일한 결과를 준다. torch 라이브러리를 불러온 상태에서 사용하는 파이선 torch 텐서 연산도 print 명령 내에서 사용 가능한 듯하다.
Torch 텐서 NumPy 어레이 변환
torch텐서량에서 필요시 NumPy 어레이로 변환이 필수적이며 그 반대도 마찬가지이다. 특히 matplot 라이브러리를 사용하여 그래픽 처리하려면 torch 텐서의 NumPy 어레이로 변환은 필수적이다. 아래는 torch 텐서의 NumPy 변환 명령 사례이다.
반면에 NumPy 어레이로부터 torch 텐서로의 변환도 아래와 같이 가능하다.
이미 TensorFlow를 많리 접해 보신 분들은 왜 상기의 내용이 PyTorch 머신 러닝에서 중요한지 이해가 갈 것으로 본다. 그 외에도 PyTorch 특유의 문법이 많이 있을 수 있겠지만 필요할 때 찾아보면 될 듯하다.
여기 소개한 내용은 아래 url 주소의 영문 내용을 참조해서 복사 해다 구글 Colabo에 실행해 보면 좋을 것이다.
안녕하세요 codingart님
좋은 하루 보내세요!!
PyTorch 포스팅을 보니 반갑네요.
방문해주셔서 감사합니다.