텐서 플로우를 활용한 딥러닝 머신 비전

파이썬과 텐서 플로우만 있으면 딥러닝이 가능하다

파이썬에 있는 라이브러리 중에는 텐서 플로우가 딥러닝에 많이 사용됩니다. 최근에는 ‘싸이노’라는 라이브러리도 추가가 되었습니다. 그러나 아직까지도 가장 인기가 많은 라이브러리는 텐서 플로우로 가장 많은 오픈소스 생태계 사용자를 가지고 있습니다. R이라는 언어를 통해서도 모델을 만들 수 있습니다. 사실 자바 또는 C언어로도 구현이 가능합니다. 특히 유명한 것이 4j 또는 웨카입니다. 파이썬에 있는 싸이 파이, 싸이킷런, 넘 파이 등과 비슷한 연관이 있습니다. 최근 인터넷상에 올라오는 코드들을 보면 이러한 라이브러리를 사용하지 않는 코드는 거의 찾아보기가 힘듭니다. 텐서 플로우는 수치를 계산하기 위한 아주 혁명적인 오픈소스 SW 라이브러리입니다. 파이썬에서 행렬을 정의해주면 텐서 플로우는 해당 행렬을 최적화되어있는 cpp코드로 실행해주며 파이썬이 아닌 시계열 언어기 때문에 속도 또한 빠릅니다. 또 계산을 할 때는 그래프라는 특성을 사용하기 때문에 다중 연산을 지원합니다. 즉 여러 개의 중앙처리장치와 그래픽카드로 연산을 동시에 수행하여 빠른 처리가 가능합니다. 또는 서버 단위로도 지원을 하기 때문에 분산 네트워크에서도 수행이 가능합니다. 클라우드 컴퓨팅을 통해 텐서 플로우를 사용한다면 전 세계의 서버에서도 텐서 연산이 가능할 것입니다. 그렇게 거대한 네트워크를 통해서 수백억 개로 구성된 데이터셋과 파라미터를 통한 학습이 가능합니다. 텐서 플로우의 개발 기업은 구글입니다. 구글은 여러 가지 서비스 구글 포토, 클라우드, 검색엔진 등 을 제공하고 있는데 이미 이를 활용하고 있습니다. 텐서 플로우가 공개된지는 벌서 5년이 흘렀습니다. 아직은 그렇게 오래되지 않은 것 같지만 그래도 꽤 된 것 같군요. 사실 텐서 플로우와 같은 기능을 제공하는 라이브러리들은 기존에도 존재했습니다. 그러나 구글 같은 대기업이 만든 기능과는 차원이 다르죠. 깔끔하고 잘 다듬어진 구조로 이루어진 텐서 플로우가 많은 과학자들에게 사랑받고 있는 이유 중 하나입니다. 지금도 1위를 당당하게 차지하고 있을 정도로 인기는 상당합니다. 또 컴퓨터 시스템뿐만 아니라 모바일 ios 또는 안드로이드 환경도 지원해서 앱 개발자들이 자신의 어플에 딥러닝을 적용할 수도 있습니다. ‘사이킷런’과도 호환이 가능하다는 점을 알고 계셨나요? 자동 미분을 지원하며 텐서 보드를 사용하면 웹 브라우저를 통해서 어떻게 모델이 학습되고 있는지 그리고 결과를 시각화해서 여러 가지 차트 형태로 확인할 수도 있습니다. 깃허브에 공개된 오픈소스 프로젝트이기 때문에 다양한 참여자들이 꾸준하게 개발에 참여하고 있기도 합니다. 그래서 2015 출시 이후 지금까지도 계속해서 더 좋은 방향으로 개발이 진행 중입니다. 번외로 씨아노의 경우에는 1.0 버전을 끝으로 사용이 중지되었습니다. 많이 아쉬운 부분입니다. 텐서 플로우에서 행렬 연산을 수행하려면 텐서 변수를 만들고 나서 바로 연산을 하는 것이 아니라 세션을 통해서 계산을 해야 합니다. 세션을 만든 뒤 가동 함수를 호출해서 연산을 할 수 있습니다. 또는 파이썬의 with구문을 사용하면 더 쉽게 연산이 가능합니다. with 구문이 끝나는 순간 자동으로 텐서 자원이 회수되기 때문에 마음 놓고 사용하면 됩니다. 텐서 플로우 연산은 크게 그래프를 만드는 것과 실행해주는 부분으로 나뉠 수 있습니다. 자료형은 내부적으로 넘 파이가 사용되기 때문에 넘 파이와 관련이 되어있다고 보시면 되겠습니다. 그렇기 때문에 텐서 플로우를 학습하기 전에 넘 파이 또한 공부를 어느 정도 마친 상태에서 텐서 플로우 실습을 하는 것도 좋은 방법입니다. 모델을 학습했다면 프로그램이 종료 시에 소실됩니다. 그렇기 때문에 공들여서 훈련시킨 모델을 그저 버리기에는 아깝습니다. 특히 몇 시간이 아니라 며칠 동안 학습을 시킨 모델이라면 갑자기 종료되면 삭제되는 경우가 있기 때문에 텐서 플로우에서는 모델을 따로 저장하는 방법을 마련했습니다. 또는 체크포인트를 사용해서 자동 저장이 되도록 할 수도 있기 때문에 이러한 기능을 잘 활용해서 아까운 모델을 잃어버리지 않도록 합시다. 사용방법은 아주 간단한 부분입니다. 저장 노드를 추가하시고 저장할 경로를 전달하고 세이브에 호출해주시면 됩니다. 또는 복원도 가능합니다. 복구 함수를 통해서 실행이 가능합니다. 이 부분은 중요한 부분이니까 꼭 염두에 두시기 바랍니다. 그리고 아까 언급했었던 텐서 보드입니다. 보통 텐서 보드를 사용하지 않으면 프린트 함수로 수치를 출력해서 확인하는 정도인데 이것은 알아보기도 어려울뿐더러 가독성도 좋지 않습니다. 그렇기 때문에 그래프를 통해서 확인하는 것이 필요합니다. 다행히도 텐서 플로우는 이러한 기능을 자체적으로 내장하고 있기 때문에 우리는 그저 그 기능을 불러서 사용하기만 하면 됩니다. 서머리와 이벤트 파일을 통해서 기록과 확인이 가능하며 스텝이 저장되는 간격도 설정할 수 있으나 너무 잦게 설정하면 학습이 느려질 수도 있기 때문에 주의해야 합니다. 저 같은 경우는 친구랑 확인한다고 매번 스탭마다 저장을 하고 통계치를 확인했는데 학습이 거의 두배 이상 느려졌으니 참고하시기 바랍니다. 포트번호를 설정하면 인터넷 브라우저에서 로컬로 접속하면 바로 확인이 가능합니다. 이때 인터넷 익스플로러를 사용하기보다는 크롬 브라우저를 사용하는 것을 추천드립니다. 통계 그래프는 물론이고 그래프를 시각화해서 볼 수도 있기 때문에 엔지니어에게 유용합니다. 여기까지 결론적으로 텐서 플로우에 대해서 알아보았습니다. 감사합니다.

Leave a Comment