텐서플로의 핵심 부분은 매우 범용적이고 유연하게 설계되었습니다. 연산은 신경망 층뿐만 아니라 올바르게 정의된 어떤 수학 함수도 가능합니다. 예를 들어 신경망 층 안에서 일어나는 덧셈이나 두 텐서의 곱셈처럼 저수준 수학 연산이 가능합니다. 딥러닝 엔지니어와 연구자들이 딥러닝을 위한 임의의 새로운 연산을 정의할 수 있는 강력한 도구입니다. 하지만 대부분의 딥러닝 기술자에게는 이런 저수준 조작은 얻는 것보다 잃는 것이 많습니다. 자만심이 많고 에러가 나기 쉬운 코드를 만들기 때문에 개발 주기가 길어집니다. 대부분의 딥러닝 엔지니어는 정해진 유형의 층을 사용합니다(예를 들어 이후 장에서 자세히 배울 합성곱, 풀링, 밀집 층). 새로운 유형의 층을 만들어야 하는 경우는 드뭅니다. 레고(LEGO)와 비유해서 설명하면 좋겠네요. 레고의 블록 종류는 많지 않으며, 레고 사용자는 레고 블록을 만들려고 생각할 필요가 없습니다. 이는 텐서플로의 저수준 API와 비교할 수 있는 플레이도(Play-Doh)23 같은 장난감과 다릅니다. 레고 블록을 연결할 수 있는 기능은 가능한 조합의 수를 크게 늘리며 실제로 무한합니다. 레고나 플레이도로 장난감 집을 만들 수 있지만 집의 크기, 모양, 텍스처, 재료에 대해 매우 구체적인 요구 사항이 없다면 레고를 사용해 만드는 것이 훨씬 쉽고 빠릅니다. 대부분의 경우 레고로 만든 집이 플레이도로 만든 것보다 더 안정적이고 멋지게 보일 것입니다.
텐서플로에서 레고와 비슷한 것이 케라스(Keras)24 고수준 API입니다. 케라스는 자주 사용하는 유형의 신경망 층을 제공합니다. 이 층들은 매개변수로 설정을 바꿀 수 있습니다. 사용자는 층을 서로 연결하여 신경망을 구성할 수 있습니다. 또한, 케라스는 다음과 같은 API를 제공합니다.
• 신경망의 훈련 방법 설정(손실 함수, 측정 지표, 옵티마이저)
• 데이터를 주입하여 신경망을 훈련하거나 평가하고, 이 모델을 사용해 추론하기
• 훈련 과정 모니터링(콜백(callback))
• 모델 저장과 로딩
• 모델 구조를 출력하거나 그리기