本文參考https://www.tensorflow.org/install/source
Tensorflow整體架構:

下載Tensorflow原始碼:
git clone https://github.com/tensorflow/tensorflow.git
下載完成后,可以看到,tensorflow目錄結構如下:
maliankang@AwExdroid112:~/tensorflow$ tree -L 2 -d
.
├── tensorflow
│ ├── c
│ ├── cc
│ ├── compiler
│ ├── core
│ ├── distribute
│ ├── docs_src
│ ├── examples
│ ├── go
│ ├── java
│ ├── js
│ ├── lite
│ ├── python
│ ├── security
│ ├── stream_executor
│ └── tools
├── third_party
│ ├── absl
│ ├── android
│ ├── aws
│ ├── benchmark
│ ├── boringssl
│ ├── clang_toolchain
│ ├── clog
│ ├── compute_library
│ ├── cpuinfo
│ ├── dlpack
│ ├── eigen3
│ ├── farmhash
│ ├── fft2d
│ ├── flatbuffers
│ ├── FP16
│ ├── gemmlowp
│ ├── git
│ ├── googleapis
│ ├── gpus
│ ├── grpc
│ ├── hadoop
│ ├── hexagon
│ ├── highwayhash
│ ├── hwloc
│ ├── icu
│ ├── jpeg
│ ├── kissfft
│ ├── llvm
│ ├── llvm_openmp
│ ├── mkl
│ ├── mkl_dnn
│ ├── mlir
│ ├── mpi
│ ├── nasm
│ ├── nccl
│ ├── opencl_headers
│ ├── pasta
│ ├── protobuf
│ ├── psimd
│ ├── py
│ ├── python_runtime
│ ├── remote_config
│ ├── ruy
│ ├── sobol_data
│ ├── systemlibs
│ ├── tensorrt
│ ├── tf_runtime
│ └── vulkan_headers
└── tools
66 directories
maliankang@AwExdroid112:~/tensorflow$
算子實作集中分布在tensorflow/tensorflow/lite/kernels目錄下:

maliankang@AwExdroid112:~/tensorflow/tensorflow/lite/kernels$ ls -l |grep test|wc -l
139
maliankang@AwExdroid112:~/tensorflow/tensorflow/lite/kernels$ ls -l |wc -l
298
maliankang@AwExdroid112:~/tensorflow/tensorflow/lite/kernels$
基本上,每個算子的實作都是一個獨立檔案,并且對應一個測驗檔案,基于這個假設(和實際相符),我們可以粗略統計一下算子的個數,就是
檔案總數-test檔案總數=298-139 = 159,也就是大概有160個算子,是否可以理解為160個算子基本能夠滿足所有網路的需求呢?我認為是的,基于的考慮是TF是一個比較全面的框架.
以常用的conv算子為例,簡單分析一下它的實作:

對應的真正實作在 optimized_ops命名空間中的Conv函式,它在另一個檔案中,我們找到它, 萬惡的矩陣乘法,一眼能看明白的,肯定是數學系畢業的大佬,

結束!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/295056.html
標籤:其他
