[图解tensorflow源码] 入门准备工作

附常用的矩阵计算工具[转]

Link: https://www.cnblogs.com/yao62995/p/5773142.html

tensorflow使用了自动化构建工具bazel、脚本语言调用c或cpp的包裹工具swig使用EIGEN作为矩阵处理工具、Nvidia-cuBLAS GPU加速计算库、结构化数据存储格式protobuf

Swig

1. Simplified Wrapper and Interface Generator (SWIG) ,基本思想就是向脚本语言接口公开 C/C++ 代码。SWIG 允许您向广泛的脚本语言公开 C/C++ 代码,包括 Ruby、Perl、Tcl 和 Python。

参考:

1. 使用SWIG实现Python调用C/C++代码

Bazel

1. bazel假定每个目录为[package]单元,目录里面包含了源文件和一个描述文件BUILD,描述文件中指定了如何将源文件转换成构建的输出。

1. name属性来命名规则,deps属性来描述规则之间的依赖关系
2. 使用冒号来分隔包名和规则名;如果某条规则所依赖的规则在其他目录下,就用"//"开头,如果在同一目录下,可以忽略包名而用冒号开头。
依赖关系:

3. bazel命令:

> bazel build -c opt //tensorflow/tools/pip_package:build_pip_package

4. 调试模式:

>  bazel build -c dbg

参考:

1. 安装bazel

> yum install java-1.8.0-openjdk

> yum install java-1.8.0-openjdk-devel

> https://github.com/google/bazel/ 下载最新版本bazel_xxx.sh安装

2. 使用bazel构建系统

3. bazel 命令手册

EIGEN

1. Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms. http://eigen.tuxfamily.org/

  • 支持整数、浮点数、复数,使用模板编程,可以为特殊的数据结构提供矩阵操作。比如在用ceres-solver进行做优化问题(比如bundle adjustment)的时候,有时候需要用模板编程写一个目标函数,ceres可以将模板自动替换为内部的一个可以自动求微分的特殊的double类型。而如果要在这个模板函数中进行矩阵计算,使用Eigen就会非常方便。
  • 支持逐元素、分块、和整体的矩阵操作。
  • 内含大量矩阵分解算法包括LU,LDLt,QR、SVD等等。
  • 支持使用Intel MKL加速
  • 部分功能支持多线程
  • 稀疏矩阵支持良好,到今年新出的Eigen3.2,已经自带了SparseLU、SparseQR、共轭梯度(ConjugateGradient solver)、bi conjugate gradient stabilized solver等解稀疏矩阵的功能。同时提供SPQR、UmfPack等外部稀疏矩阵库的接口。
  • 支持常用几何运算,包括旋转矩阵、四元数、矩阵变换、AngleAxis(欧拉角与Rodrigues变换)等等。
  • 更新活跃,用户众多(Google、WilliowGarage也在用),使用Eigen的比较著名的开源项目有ROS(机器人操作系统)、PCL(点云处理库)、Google Ceres(优化算法)。OpenCV自带到Eigen的接口。

2. 常用的矩阵计算工具有blas, cublas(caffe)、atlas、openblas(mxnet)、eigen,还有lapack、mkl(intel)、Armadillo(matlab)

3. Eigen库包含 Eigen模块和unsupported模块,其中Eigen模块为official module,unsupported模块为开源贡献者开发的,没有official support。

1. 矩阵运算库blas, cblas, openblas, atlas, lapack, mkl
2. eigen 参考文档

https://eigen.tuxfamily.org/dox/

C++矩阵运算库推荐

 

protobuf

1. Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。

2. 使用
      > 编写.proto文件,编译后生成 .pb.h / .pb.cc文件

Writer: SerializeToOstream(),   Reader: ParseFromIstream()

> required:一个格式良好的消息一定要含有1个这种字段;

> optional:消息格式中该字段可以有0个或1个值(不超过1个)。

> repeated:在一个格式良好的消息中,这种字段可以重复任意多次(包括0次)。相当于java中的List。

3.

4. grpc需要理解4个方面(service,stub,channel,observer)

  • service,
  • stub:客户端调用 stub 对象,所谓 stub 对象就是具有声明好的方法的 fake object。stub 对象将请求用 protobuf 方式序列化成字节流,用于线上传输,到 server 端后调用真正的实现对象处理。
  • channel,指定连接的服务器地址和端口,用于stub连接到service
  • observer,服务端,观察处理返回和关闭通道

Protobuf 语法指南

gRPC 入门及源码分析

Stream

Executor

> google stream executor team: work on parallel programming models for CPUs, GPUs and other platforms.
StreamExecutor is a unified wrapper around the CUDA and OpenCL host-side programming models (runtimes). 
>StreamExecutor and libomptarget are libraries that are both meant to solve the problem of providing runtime support for offloading computational work to an accelerator device. The libomptarget library is already hosted within the OpenMP LLVM subproject, and there is currently a proposal to create another LLVM subproject containing StreamExecutor. 
> StreamExecutor is currently used as the runtime for the vast majority of Google's internal GPGPU applications, and a snapshot of it is included in the open-source TensorFlow project, where it serves as the GPGPU runtime.

https://github.com/henline/streamexecutordoc

https://github.com/henline/streamexecutordoc/blob/master/se_and_openmp.rst

TF C++

1. TF源码安装: following the instructions here

2. example:  tensorflow/cc/tutorials/example_trainer.cc

3. 自定义的op Kernel: tutorial for adding a new op in C++.

4. TF c++ 调试: debugging Tensorflow's C++ code behind the SWIG interface

> The simplest interface between Python and C++ is the pure-C API in tensor_c_api.h

 

转载于:https://www.cnblogs.com/xiexiaokui/p/9598375.html

[图解tensorflow源码] 入门准备工作附常用的矩阵计算工具[转]相关推荐

  1. [图解tensorflow源码] [原创] Tensorflow 图解分析 (Session, Graph, Kernels, Devices)

    TF Prepare [图解tensorflow源码] 入门准备工作 [图解tensorflow源码] TF系统概述篇 Session篇 [图解tensorflow源码] Session::Run() ...

  2. 生成对抗网络入门详解及TensorFlow源码实现--深度学习笔记

    生成对抗网络入门详解及TensorFlow源码实现–深度学习笔记 一.生成对抗网络(GANs) 生成对抗网络是一种生成模型(Generative Model),其背后最基本的思想就是从训练库里获取很多 ...

  3. CNN入门详解及TensorFlow源码实现--深度学习笔记

    CNN入门详解及TensorFlow源码实现–深度学习笔记 ##一.卷积神经网络 ###1.简介 卷积神经网络是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出 ...

  4. 干货|TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法工程师 安装平台 1 平台 目前Tensor ...

  5. Tensorflow源码学习经历(一)

    前言 准研一学生,暑假开始学习tensorflow.导师让我学习的不是如何使用TenosrFlow构建机器学习模型,而是把目光放到TensorFlow框架本身上,了解tf框架内部的工作原理.翻阅各类书 ...

  6. anaconda tensorflow 2.3_TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)

    1 安装选择 1.1 平台 目前TensorFlow已支持Mac.Ubuntu和Windows三个主流平台(64位平台), 1.2 GPU vs CPU 在安装时可以选择安装版本是否支持GPU, 1. ...

  7. Tensorflow源码解析1 -- 内核架构和源码结构

    1 主流深度学习框架对比 当今的软件开发基本都是分层化和模块化的,应用层开发会基于框架层.比如开发Linux Driver会基于Linux kernel,开发Android app会基于Android ...

  8. cuda 编译 linux,Linux下安装Tensorflow源码及编译

    下载Tensorflow源码 git clone https://github.com/tensorflow/tensorflow 如果无法下载也可以在github上直接下载tensorflow的打包 ...

  9. Tensorflow源码编译

    相比源码编译各版本之间遇到的坑来说,pip安装真心省事.不过由于项目需要采用C++实现的整个感知模块,只能把DL前向传播这块也写成C++形式.这是我去年的编译过程,当时有不少坑没能记录下来,以后有机会 ...

最新文章

  1. 给虚拟机中的linux系统增加一个硬盘
  2. string的内存管理问题
  3. spring bean初始化及销毁你必须要掌握的回调方法。
  4. torch7框架 深度学习(1)
  5. 了解HTML CSS格式化排版 文字排版
  6. 第五篇:你“ 看不见 ” 的隐式转换
  7. 诺基亚再做手机,没有机会
  8. 好用的在线JSON编辑与格式化工具
  9. 学生宿舍管理信息系统软件测试,asp.net学生宿舍管理系统
  10. 微信小程序显示列表数据
  11. P2346 四子连棋 题解
  12. Xshell4、Xftp4注册码
  13. mysql字段长度的作用_数据库字段的长度 作用
  14. fail can only be invoked by user TAP gesture.
  15. 数据分析模型篇—安索夫矩阵
  16. python day46
  17. git checkout恢复文件
  18. 图数据库——大数据时代的高铁
  19. 一文带你快速了解常用的CSS选择器场景
  20. RISC-V MCU 智能安全驾驶监测系统

热门文章

  1. 云服务器centos怎么还原系统还原,云服务器centos怎么还原系统还原
  2. Java 主流垃圾收集器
  3. iPhone的mysql客户端_适用于iPhone的MySQL C API库
  4. Docker必备知识整理
  5. c#水晶报表连接mysql,如何将数据库绑定到水晶报表?
  6. stm32 PWM互补输出
  7. zigbee无线通信数码管实验、usbDongle抓包、发字符串
  8. 两数的和与差的简单函数
  9. 《零基础》MySQL WHERE 子句(十三)
  10. android 高德获取省市,高德地图定位获取当前地址城市街道等详细信息(全部代码)...