하지만 왜 텐서일까요? 이전 절에서 심층 신경망 실행에 관련된 많은 계산이 대량의 병렬 연산으로 수행된다고 배웠습니다. 많은 양의 데이터에서 동일한 계산을 수행하는 데 필요한 GPU에서 일반적으로 이런 연산이 수행됩니다. 텐서는 데이터를 효율적으로 병렬 처리할 수 있는 구조로 만드는 컨테이너입니다. 예를 들어 [128, 128] 크기의 텐서 A를 [128, 128] 크기의 텐서 B에 더한다면 128 * 128개의 독립적인 덧셈이 발생됩니다.
‘플로(flow)’는 무엇일까요? 텐서를 데이터를 실어 나르는 일종의 액체라고 상상해 보세요. 텐서플로에서 텐서는 그래프를 따라 흐릅니다. 그래프는 (노드(node)라 부르는) 상호 연결된 수학 연산으로 구성된 데이터 구조입니다. 그림 1-8에 나타나 있듯이 노드는 신경망에서 연속적인 층이 될 수 있습니다. 각 노드는 입력으로 텐서를 받고 출력으로 텐서를 내보냅니다. ‘텐서 액체’는 텐서플로 그래프를 따라 흐르면서 다른 크기와 다른 값으로 변형됩니다. 이것이 이전 절에서 설명한 신경망 작업의 핵심인 표현의 변환에 해당됩니다. 텐서플로를 사용하면 머신 러닝 엔지니어는 모든 종류의 신경망을 만들 수 있습니다. 얕은 신경망에서부터 매우 깊은 신경망까지, 또 컴퓨터 비전을 위한 합성곱 신경망과 시퀀스(sequence) 데이터를 위한 순환 신경망도 만들 수 있습니다. 그래프 데이터 구조는 직렬화하여 메인프레임(mainframe)에서 스마트폰까지 다양한 종류의 장치에 배포할 수 있습니다.
▲ 그림 1-8 텐서플로와 TensorFlow.js의 일반적인 형태인 연속된 여러 층을 따라 텐서가 흐른다.