최근 회사 컴퓨터에 PyTorch를 사용해야 되는 상황이 생겨서, PyTorch 사이트에서 있는 가이드대로 최신 버전과 Cuda도 버전 업을 하여서 Torch 설치 시도를 하였으나, Conda로 설치를 하는 것이 실패하고 말았다. 위와 같이 Command를 입력하면, Solving에서 무한 멈춤 현상이 발생하였는데 이 문제를 해결하기 위해 아나콘다를 다시 깔아보고, Cuda도 다양한 11.6.x 버전들을 설치했지만, 아무래도 SSL 문제처럼 보였다. 결국 PIP로 trusted-host로 사이트를 신뢰한다고 표시 한 뒤, 설치를 마무리 하였으나 이번에는 Torch가 Cuda를 인식하지 못하는 문제가 발생하였다. import torch torch.cuda.is_available() 위와 같이 명령어를 날리..
구글 코랩 구글 코랩(Google colab)은 내 현재 사양이 딥러닝(Deep Learning) 혹은 머신러닝(Machine Learning)을 돌리기 적합하지 않거나, 다양한 기기를 사용해서 통일된 환경으로 작업을 하고 싶거나, 실제 서비스에 적용해보기전에 테스트로 돌리기 용이한 환경입니다. 구글은 코랩이라는 GPU가 탑재된 클라우드 환경을 사용자에게 무료로 제공해주고, 사용자는 코랩에서 다양한 실험을 하면서 구글은 실험 데이터를 얻고 우리는 무료로 빠르게 딥러닝을 테스트 해볼 수 있습니다. 다만 코랩이 고급 환경을 계속 제공해주는 것은 아닙니다. 예를 들어 모델링 학습 시간이 하루가 넘어가는 것이라면 사용을 할 수 없기 때문에 사실상 본섭에 실행을 하기 전 맛보기 정도에 불과하다는 것을 인지해야 합..
텐서(Tensor)라고 하면 텐서플로우를 떠올리기 쉽지만, 사실 딥러닝에서는 데이터를 처리하기 위한 데이터의 형태라고 이해하면 된다. 0차원의 데이터는 보통 스칼라(Scalar)라고 하는데 파이토치에서는 0-Tensor(랭크 0)이며, 스칼라 데이터의 나열인 벡터는 1-Tensor(랭크 1), 행렬은 2-Tensor(랭크 2)이다. 텐서는 파이썬의 대표적인 라이브러리인 넘파이(numpy)와 유사하고 넘파이와 데이터를 쉽게 서로 변환 할 수도 있다. 위 내용들을 좀 더 쉽게 설명하자면, 우리가 프로그램으로 사용하는 변수들을 딥러닝으로 처리하기 위해서는 변환을 해야 하는데 그 단위가 바로 텐서라고 생각하면 된다. 텐서 데이터타입 [1] 데이터 타입 dtype CPU tensor GPU tensor 32-bi..
파이토치(Pytorch)는 페이스북에서 바톤터치를 한 이후 계속 만들고 잘 관리하고 있으며 한 때 텐서플로우로 딥러닝 시장이 제패될 것 같던 상황에서 파이토치가 기가 막히게 생명력을 유지하면서 최근에는 특정 분야는 더 앞서는 모습을 보여주기도 한다. Pytorch는 그냥 학문에서나 쓰이며 박사나 일부 연구원들이 사용하는 것이라 다짐하며, 다시는 배우지 않을거라 생각했지만 최근 들어 자연어처리쪽의 파이토치의 약진이 무섭다. 그래서 신기술을 빠르게 익히기 위해서 Pytorch를 배운다는 것은 선택이 아니라 필수가 되어 버렸다. 그럼 설치와 사용에 앞서 각각은 언제 사용하는 것이 좋은지 해외 아티클들을 뒤지면서 정리해보았다. Pytorch vs Keras vs Tensorflow 우선 초창기의 텐서플로우(Te..
다시 기초부터 포스팅 하나당 신경망 하나를 포스팅하는 것은 쓰는 사람도 그걸 받아들이는 사람들 중에 비전공자는 힘들 수 있다. 이미 MNIST(손글씨)와 유사한 Fashion MNIST(패션 아이콘)를 분류하는 모델을 포스팅한 적이 있지만, 하나하나 디테일하게 설명하지 못한 아쉬움이 있다. 이번 포스팅부터는 좀 더 쉽게 설명하기 위해서 신경망을 하나하나 코딩할 때마다 해당되는 기술들에 대해서 별도의 포스팅을 작성하고 어떤 방법으로 이루어지는지 써보도록 한다. 그리고 성능을 올리기 위해서 어떻게 튜닝을 하는지 적어보도록 하겠다. train에 사용될 매개변수(parameter)들 import tensorflow as tf import numpy as np from tensorflow import keras ..
이전 포스팅에서는 classification 모델을 MNIST 데이터를 이용하여 분류를 해보았다. 그러나 많은 사람들이 데이터가 약간만 변형이 되어도 즉 틀이 다른 데이터를 어떻게 학습해야 되는지 헷갈려 할수가 있다. 해당 포스팅은 대표적인 데이터셋인 붓꽃(IRIS) 데이터셋을 기반으로 신경망을 수행하고 학습하여 테스트셋 아이리스 값의 정확도를 측정한다. 참고로 해당 포스팅은 연속적인 지식의 습득을 위해 이전 포스팅의 신경망 소스와 크게 다르지 않다. 데이터 구조 아이리스 데이터 구조... 47,5.1,3.8,1.6,0.2,Iris-setosa 48,4.6,3.2,1.4,0.2,Iris-setosa 49,5.3,3.7,1.5,0.2,Iris-setosa 50,5,3.3,1.4,0.2,Iris-setosa..
MNIST(Modified National Institute of Standards and Technology database)는 0~9까지의 숫자를 사람들이 손으로 직접 쓴 손글씨를 이미지화한 데이터셋이다. 딥러닝(Deep Learning)을 제외한 머신러닝(Machine Learning)에 IRIS(붓꽃 데이터)셋이 있다면 딥러닝에는 MNIST가 있으며 그만큼 성능을 자랑하기에 매우 딥러닝에 효율적이며 기본으로 내장이 되어 있어서 언제든지 불러서 실습을 해볼 수가 있는 데이터셋이다. MNIST 데이터셋 최근에는 이에 MNIST보다 조금 더 분류가 힘든 fashion mnist라는 데이터셋이 신규로 추가되었다. 둘의 포맷은 완전히 동일하기에 성능을 측정하기에 MNIST보다 더 수월해보인다. Fashio..
텐서플로우가 2.0 버전으로 들어서게 되면서, 많은 변화들이 생겨났다. 최근 프로젝트를 강제로 2.0으로 변환하고 있는데 아직 해당 버전에 대한 이해도가 낮기 때문에 많이 힘들어서 자구책으로 케라스(Keras)로 변환하여 사용하고 있다. 텐서플로우 2.0대부터는 케라스가 텐서플로우 프로젝트에 편입되었기 때문에 케라스로 구현하든 텐서플로우 2.0으로 코딩하든 사실 크게 상관이 없겠지만, 케라스의 쉬운 코딩은 소스의 길이를 대폭 감소하고 텐서플로우 2.0을 써도 크게 문제가 되지 않는 모델을 만들어준다. 우선 그러면 1.0과 2.0이 얼마나 차이가 나는지 한번 보도록 해보자. 아래 소스는 Packt 출판사에서 발매한 "Deep Learning with TensorFlow 2 and Keras"라는 도서에서 ..
케라스(Keras) 설치가 완료되었으면, 이제 케라스를 이용해서 본격적으로 간단한 문제를 학습을 통해서 풀어보는 시간을 갖도록 하겠다. 학창 시절 방정식 문제를 지겹게 풀어봤을 터인데 컴퓨터의 학습은 바로 이 방정식으로 끝이 난다고 해도 과언이 아니다. y = ax + b 위에 있는 매우 쉬운 공식은 머신러닝과 딥러닝을 이해하기 위한 공식이며, 이것만 이해할 줄 안다면 모든 것은 아니지만 딥러닝을 학습할 준비는 모두 끝이 난 것이다. 위 공식을 기반으로 문제를 생성을 한번 해보겠다. 5 = a*2 + b 3 = a*1 + b 7 = a*3 + b 위 문제들을 보았을 때, a와 b의 값은 무엇일까? 사실 이정도는 수학과 담을 쌓은 사람이라고 해도 쉽게 풀 수 있을 것이다. 정답은 a=2, b=1 이다. 딥..
케라스(Keras)는 텐서플로우(Tensorflow)와 함께 대표적인 파이썬(Python)에서 사용하는 딥러닝(deep learning) 라이브러리이다. 많은 사람들이 텐서플로우와 케라스를 동일한 레벨에서 수행되는 라이벌 라이브러리라 착각 할 수 있지만, 둘은 라이벌 관계가 아니라 공생 관계라 할 수 있다. 이번 포스팅에서는 케라스에 대해서 간단히 개념에 대해서 설명을 하고 Python에서 케라스를 설치하는 방법에 대해서 간단히 적어보고자 한다. 케라스(Keras) 설명 케라스(Keras)는 파이썬으로 작성된 오픈 소스 신경망 라이브러리이다. MXNet, Deeplearning4j, 텐서플로, Microsoft Cognitive Toolkit 또는 Theano 위에서 수행할 수 있다. - 위키피디아 - ..
변수와 플레이스 홀더와 Weight 값 세팅하는 것만 배웠는데 무슨 벌써 신경망인가? 하실지 모르겠지만 사실 텐서플로우는 어느정도 익히고, 일반 개발에서 Hello World 찍거나 구구단 짜는 수준이 바로 간단한 신경망을 만드는 것이라 생각해도 된다. 파이썬만 어느정도 다룰 수 있다면, 다음부터는 진도를 쭉쭉 나갈 수 있다. 사실 텐서플로우에서 구현하는 신경망이라고 하는 것이 거의다 잘 짜여진 메소드 호출하고 하는 것인데 우리는 몇개의 Feature(특징)와 몇개의 노드, 그리고 몇개의 Output으로 되어 있는지, 회귀인지 분류인지 등등 정도만 정의하면 텐서플로우가 알아서 다 돌아간다. 그러니 만약에 여기서 텐서플로우 개발자는 대단해라고 생각한다면 그것은 큰 오산이다. 모든 연산을 텐서플로우가 거의다..
바로 전 포스팅에는 개발자라면 대부분 처음 들어보는 개념의 플레이스 홀더(Placeholder)라는 것을 끄적여 봤습니다. 대부분 변수(Variable)라는 개념을 알고 있는 상황에서 변수와 비슷한데 약간 미묘하게 다른 플레이스 홀더로 인해서 약간 혼란스러울지도 모르겠습니다. 저 역시도 이 부분에 대해서 혼동이 많이 왔었고, 주변의 텐서플로우를 시작한 개발자분들 역시 변수와 플레이스홀더의 차이점을 이해하는데 시간이 좀 걸린 것 같습니다. 사실 그리 어려운 것이 아닌데 헷갈려서 어려운 것이겠죠. 변수는 말그대로 變數(변하는 수)입니다. 즉, 뭔가 값이 계속 변하며 그 값을 계속 세팅한다면 우리는 변수로 이해하면 되고, 파이(3.14)같이 이미 정해져 있는 수는 상수로서 프로그램 언어에 맞게 세팅을 하게 됩..