본문 바로가기
AI Research/Deep Learning

[딥러닝 기본지식] 딥러닝 프레임워크 비교(Tensorflow, Keras, Pytorch)

by ga.0_0.ga 2023. 3. 4.
728x90
반응형

딥러닝에 사용되는 프레임워크(Framework)에는 Tensorflow, Keras, Pytorch, Caffe, MXNet 등이 있습니다. 이들 중 가장 많이 사용되는 것은 Tensorflow, Keras, Pytorch입니다. 이번 포스팅에서는 세 가지 프레임워크를 비교해보겠습니다.

자세한 설명 전에 프레임워크에 대해 간략히 설명하겠습니다.

※ 프레임워크란?

응용 프로그램 개발을 위해 여러 라이브러리나 모듈을 효율적으로 사용할 수 있도록 하나로 묶어 놓은 것입니다. 프로그램의 전체적인 구조와 흐름을 확정짓고, 더 나아가 프로그래머가 정의해주어야 하는 함수의 이름까지 결정합니다.

Tensorflow, Keras, Pytorch 세 가지 프레임워크들은 서로 다른 목적으로 설계되었으며, 각각 고유한 기능과 특성을 가지고 있습니다.

▶ Tensorflow

2015년 구글이 개발한 딥러닝 프레임워크입니다. python 뿐만 아니라, C++, R도 지원합니다. 딥러닝 모델을 직접 작성해 줄 수도 있고 wrapper 라이브러리를 사용하여 직접 작성하는 것 또한 가능합니다. 텐서플로우는 데이터 플로우 그래프(Data Flow Graph)구조를 사용하는 특징이 있습니다. 데이터 플로우 그래프는 수학 계산식과 테이터의 흐름을 노드와 엣지를 사용한 방향 그래프로 표현하는 방식입니다. 노드들 사이의 연결 상태나 텐서 사이의 연결 관계를 풍부하게 표현할 수 있습니다. 이로 인해, 텐서보드라는 시각화 도구를 사용해 그래프 실행 방법에 대한 검사나 프로파일링도 가능합니다.

텐서플로우는 Define and Run 방식을 취하고 있습니다. Define and Run 방식은 그래프를 미리 만들어 두고 연산을 할 때 값을 전달하는 방식입니다. 매우 불편한 방식중 하나인데 최근 2.0버전이 나오면서 많은 부분 개선되었다고 합니다.

※ Define and Run 방식이란?

그래프를 미리 만들어 두고 연산을 할 때 값을 전달하는 방식입니다. 코드를 실행하는 세션을 만들고 placeholder라는 것을 선언한 후 이것을 계산 그래프 형태로 만듭니다. 그 다음 코드를 실행할 때 데이터를 넣어서 실행하는 방법입니다. 그렇기 때문에 실행시점에 동적으로 변경이 불가능합니다. 반대되는 개념으로는 Define by Run 방식이 있습니다. Define and Run 방식과 다르게 실행시점에 동적으로 변경 가능합니다.

- 장점 : 대규모 예측 모델 구성에 뛰어나 테스트부터 설계까지 거의 모든 딥러닝 프로젝트에 범용적으로 활용할 수 있습니다.

- 단점 : Define and Run 방식을 개선하면서 난이도 면에서는 상당히 개선점을 보였지만 개선전보다 속도가 느려졌다는 단점이 존재합니다. 또한 프레임워크들 중에서 사용하기 어려운편에 속합니다.

▶ Keras

케라스 역시 구글에서 개발된 프레임워크입니다. 텐서플로우의 난이도 문제를 해결하고자 등장했습니다. 텐서플로우를 기반으로 설계되었습니다. 사용하기 편하기 때문에 레이어를 쉽게 순차적으로 쌓을 수 있고 케라스 함수 API를 이용하여 복잡한 모델도 쉽게 구현할 수 있습니다. Define by Run 방식으로 동작합니다.

- 장점 : 최적화된 간단하고 일관된 인터페이스를 제공합니다. 또한 프레임워크의 구성 요소들이 모듈 형태이며, 각 모듈이 독립성을 갖습니다. 그렇기 때문에 새로운 모델을 만들 때 잘 조합만 한다면 쉽게 만들 수 있습니다.

- 단점 : 모듈화의 한계로 디테일한 모델링 어렵다는 문제가 있습니다.

▶Pytorch

파이토치는 페이스북에서 개발된 프레임워크입니다. 토치(torch)라는 머신 러닝 라이브러리에 바탕을 두고 만들어졌습니다. 텐서플로우와 다르게 간단하고 생성된 계산 그래프가 동적으로 변할 수 있습니다. 또한 코드 자체가 파이썬과 유사하기 때문에 쉽게 배울수 있습니다.

- 장점 : 그래프를 만들면서 동시에 값을 할당하는 Define by Run 방식이기 때문에 코드를 깔끔하게 작성할 수 있습니다. 또한 학습속도가 텐서플로우보다 빠릅니다. 텐서플로우는 능동적인 신경망을 만들 수 없어 성능면에서 한계가 있지만, 파이토치는 메모리 연산과 동시에 신경망 사이즈를 최적으로 바꾸면서 동작할 수 있습니다.

- 단점 : 아직은 텐서플로우 보다 사용자가 적은 편입니다.

728x90
반응형

댓글