티스토리 뷰

텐서플로우는 현재 가장 범용적으로 사용되는 딥러닝 프레임워크이다.


[장점]

1. 텐서 보드(TensorBoard) : 가장 많은 사람들이 압도적으로 텐서플로우를 지지하는 이유라고 볼 수 있다.

 텐서 보드를 통해서, 파라미터의 변화 양상이나 DNN에 대한 구조도를 그려줌으로써 Tensor들과의 연결관계, Tensor의 Flowing Status 를 잘 보여주는 것이 매력이라고 한다.

 - Logging events interactively  리눅스에서 tail -f <log_file>과 같은 명령으로 로그파일을 체크하듯 마찬가지로 Logging events를 통해서 할 수 있다.


2. 구글 소프트웨어 전문가들의 작품 : 애초에 산업용으로 만들어진 프레임워크이며, 구글에서 공식 릴리즈하였기 때문에, 그 전문성이 보장된다고 할 수 있다.

 Caffe, Theano 등의 많은 딥러닝 프레임워크들은 대학원 연구실에서 만들어졌기 때문에 대학원생들이 유지보수를 하기 때문에 그 차이가 있을 것이다.


3. 커뮤니티가 형성되어있고, Torch -> TensorFlow migration도 이루어지고 있다.

4. Technical blocking에 대한 파악과 해결이 빠르다.

 - Multi-GPU support(하지만 어떻게 문제를 분할 정복할지에 대해서는 유저가 생각해야된다)

 - Training across distributed resources(0.8 버전부터 distributed training 서포트된다)

 - Queues 에 data loading, 그래프에서의 전처리같은 opeartion을 넣을 수 있다.

 - 잠시동안 모델을 트레이닝하다가, 평가하기 위해서 중단하고, 다시 checkpoint를 Reload하여 트레이닝을 재개할 수 있다.

 - 성능과 GPU memory 사용량이 Theano와 유사해졌고, 나머지 모든 기재들은 CUDNN을 사용한다. CUDNN v2를 사용해서 나타나는 성능상의 문제점이 0.8버전으로 오면서, CUDNNv4 을 사용함으로써 해결되었다.

 - Keras은 TensorFlow와 Theano 백엔드를 모두 wrapping하는데 이를 통해서, TensorFlow 또는 Theano의 디테일을 굳이 알 필요없이 modularity를 구가할 수 있다.

 - 



[단점]

1. 메모리를 효율적으로 사용하지 못하고 있다.

 "Chanier에선 어떤 변수에 대해 volatile flag를 켜면 그 변수에 대한 computation history를 저장하지 않음으로써 메모리를 절약할 수 있다. 이는 RNN validation / test할 때에 특히 유용했는데, training할 때에는 truncated BPTT를 사용해 일정한 길이 이하로만 BPTT가 일어나도록 하고, validation과 test시에는 전체 sequence를 입력으로 줄 수 있었다. 하지만, TensorFlow에는 이 기능이 없어 메모리가 초과되기 쉽기 때문에 test 시에 batch size를 확 줄여야 했다. (Cahiner에서는 반면 batch size를 확 늘려도 된다)"


2. Symbolic loop 관련 기능이 Theano에 비해 flexible하지 못하다. scan함수가 있지만, 무조건 accumulator parameter와 return value의 타입이 Tensor여야만 한다.

Viterbi decoding 등을 scan을 통해 구현하려고 해도 max와  argmax 값을 동시에 저장할 수 없기 때문에 쓸데없이 workaround하는 일이 필요하다. (ex float으로 cast + concat하여 return한다음 다시 사용할 때는 slice하여 사용)




https://indico.io/blog/the-good-bad-ugly-of-tensorflow/

댓글