Hidden : Dense(64 > 32 > 16 > 8 > 1)
- CPU 실행 -
- GPU 실행 -
Trainable params: 689,345
당연히 패러미터의 수가 많지 않을 때 이기는 하지만요.
TF도 백엔드에서는 Native 코드로 짜여있을테니... Python에서 C wrapper를 써본적은 없지만, Java에서 JNI썼던 경험으로는... C/C++ Native코드를 call하는데 클럭 소요가 상당했던걸로 기억합니다. (물론 이 부분은 CPU/GPU 동일)
거기에 CUDA커널을 짜보면, Host메모리에서 Device(GPU)의 Global메모리(GDDR등)으로 전송하는 I/O가 꽤나 크리티컬한 요소에....
Tensorflow backend가 어캐 구현됬는지는 모르겠지만 CUDA에서 입력에 최적화된 Grid사이즈를 지정하는것에 따라서 성능차가 많이 나는데... 그 부분의 최적화도 중요하고 (요즘 핫한 딥러닝 컴파일러가 이런걸 해주더라구요)
일단 TF가 코드 몇 줄로 DNN을 일반 엔드유저가 중요한 부분은 덮어놓고 쓸 수 있게 한 것은 정말 혁신이지만 잘 쓰려면 사실 뒤에 돌아가는걸 많이.... 알아야 하더라구요.
그래서 성능이 중요한 페이퍼를 보면 조금 더 사정이 나은 pytorch를 쓰거나... Yolo의 darknet같이 자기가 C/C++로 처음부터 구현하는 굇수들이 있나봅니다.