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

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

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

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

 tensorflow使用了自动化构建工具bazel、脚本语言调用ccpp的包裹工具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等解稀疏矩阵的功能。同时提供SPQRUmfPack等外部稀疏矩阵库的接口。
  • 支持常用几何运算,包括旋转矩阵、四元数、矩阵变换、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现共收到 5 个分组,其目的地址分别为: (1) 128.96.40.10 (2) 128.96.41.12 (3) 128.96.41.151 (4) 192.4.123.17 (5) 192.4.

计算目的地址的下一跳: 设某路由器建立了如表 1 所示路由表。现共收到 5 个分组,其目的地址分别为:(1) 128.96.40.10(2) 128.96.41.12(3) 128.96.41.151(4) 192.4.123.17(5) 192.4.123.90试分别计算下一跳解答: 用目的IP地址和路由…

衡量模块独立性的两个定性标准

衡量模块独立性的两个定性标准- 耦合:- 内聚内聚和耦合 模块的独立程度可以由两个定性标准衡量,这两个标准分别是内聚和耦合。 耦合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此结合…

【转】Docker学习_本地/容器文件互传(5)

1、查找所有容器 #docker ps a 2、找出我们想要的容器名字并查找容器长ID #docker inspect -f {{.ID}} python 3、拷贝本地文件到容器 docker cp 本地路径 容器长ID:容器路径docker cp /Users/xubowen/Desktop/auto-post-advance.py 38ef22f922704b32cf2650407e16b146bf61c221…

数据流图典型例题

数据流图典型例题 1.假设一家工厂的采购部每天需要一张订货报表,报表按零件编号排序,表中列出所有需要再次订货的零件。对于每个需要再次订货的零件应该列出下列数据:零件编号、零件名称、订货数量、目前价格、主要供应商、次要供应商。零件…

对称机密算法与非对称机密算法

1、对称加密算法, 加密和解密用的是同一个密钥,常见的为AES算法。缺点:秘钥才传输过程中可能被截取,存在安全问题, 2、非对称加密算法,常见的为RSA算法,它不是像对称机密的算法, 双方…

白盒测试的逻辑覆盖辨析(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖)

白盒测试逻辑覆盖(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖) 逻辑覆盖测试: 语句覆盖:每条语句至少执行一次判定覆盖:每一判定的每个分支至少执行一次条件覆盖:每一判定中的每个条件&…

03 CSS听课笔记

CSS:页面美化和布局控制 1. 概念: Cascading Style Sheets 层叠样式表层叠:多个样式可以作用在同一个html的元素上,同时生效 2. 好处:(1)功能强大(2)将内容展示和样式控制分离   * 降低耦合度。解耦   * 让分工协作…

安装MySQL时出现“服务没有响应控制功能。请键入 NET HELPMSG 2186 以获得更多的帮助。”的问题解决

安装MySQL时出现“服务没有响应控制功能”的问题解决第一步:设置环境变量第二步:初始化my.ini第三步:添加文件第一步:设置环境变量 安装MySQL时,运行“net start mysql”时出现“服务没有响应控制功能。请键入 NET HE…

vue-cli webpack 引入jquery

今天费了一下午的劲,终于在vue-cli 生成的工程中引入了jquery,记录一下。(模板用的webpack) 首先在package.json里的dependencies加入"jquery" : "^2.2.3",然后install 在webpack.base.conf.js里加入 var webpack requi…

时间序列模型——ARIMA模型实现预测

ARIMA模型和因子预测 文章目录ARIMA模型和因子预测一、ARIMA模型(整个周期)1.数据预处理2.展示时序图2.数据建模(1)差分d(2)p和q(3)选择模型(4)检验残差序列&…

线段树 离散化

题目一:E. Infinite Inversions 这个题目没什么思维量,还比较简单,就是离散化要加上每一个值的后面一个值,然后每一个值放进去的不是1 ,而是这个值与下一个点的差值。 因为这个数代表了一堆数,然后每一次的…

时序模型——如何用Python进行时序模型预测的baseline预测(简单规则)

时序模型——如何用Python进行时序模型预测的baseline预测(简单规则) 在对时间序列问题进行建模预测之前,通常可以通过一些简单的规则对结果进行提前的预测,可以作为baseline,供之后的模型进行参考。很多数据分析的比…

国内一些大公司的开源项目

http://www.open-open.com/lib/view/open1377700292339.html 阿里 阿里的开源项目很多,这也跟淘宝正明的开源态度密不可分。有很多重量级的项目,例如LVS、Tengine,或者很有实践价值的中间件,例如 MetaQ(分布式消息系统)、dubbo(RP…

简单关联规则算法例题-9个顾客的编号为(T1,T2,T3,T4,T5,T6,T7,T8,T9),每一个顾客购买的商品记录{{I1,I2,I5}...},并使用python实现简单关联规则

题目: 简单关联规则算法例题-9个顾客的编号为(T1,T2,T3,T4,T5,T6,T7,T8,T9),每一个顾客购买的商品记录{{I1,I2,I5},{I2,I4},{I2,I3},{I1,I2,I4},{I1,I3},{I2,I3},{I1,I3},{I1,I2,I3,I5},{I1,I2,I3}},求频繁项集;并用py…

ASP.NET AJAX (Atlas) 拖放(Drag Drop)功能6种实现方法总结

在Ajax程序中实现传统桌面程序中异常简单的拖放功能却并不是件容易的事情。然而Web上的拖放功能又如此的让人痴迷,所以几乎每个成熟的Ajax类库都提供了自己的一套实现拖放的封装,ASP.NET AJAX (Atlas) 自然也不例外。本文将总结并简要分析ASP.NET AJAX (…

python实现决策树-数据集如下图所示,根据我们对决策树的理解,设计一棵决策树,并输入{Age:36,Salary:H,STU:No,Credit:OK} 测试数据,是否与预期结果一致?

题目:数据集如下图所示,根据我们对决策树的理解,设计一棵决策树,并输入{Age:36,Salary:H,STU:No,Credit:OK} 测试数据,是否与预期结果一致?注意,不允许直接调用Sklearn提供的决策树方法 决策树算…

047 一维数据的格式化和处理

目录 一、概述二、数据组织的维度2.1 从一个数据到一组数据2.2 维度:一组数据的组织形式2.3 一维数据2.4 二维数据2.5 多维数据2.6 高维数据2.7 数据的操作周期三、一维数据的表示3.1 如果数据间有序:使用列表类型3.2 如果数据间无序:使用集合…

Python 将字典(dict)转换为DataFrame

Python 将字典(dict)转换为DataFrame 1.将字典转换为 Pandas DataFame 的方法 Pandas 的 DataFrame 构造函数pd.DataFrame()如果将字典的 items 作为构造函数的参数而不是字典本身,则将字典转换为 dataframe。 import pandas as pdfruit_dict {3: apple,2: banan…

jupyter中中文显示不正常_jupyter画图中文显示乱码问题解决办法

问题:为什么Jumpy中运行图片无法正常显示中文字体? 在使用jumpy运行可视化代码时,发现图片无法正常显示中文符号,在尝试网上诸多方法后,发现只需加一行代码即可解决 解决方法: 可以查看一下代码中是否存…

如何合理的定义用户流失——流失多少天算流失

关于流失用户,我们首先想到的是选择怎样的时间跨度才能准确定义玩家为一个流失用户。通常在游戏中,会有对流失玩家召回活动,假如流失玩家的流失期限定义太短,比如3天未登录游戏,即算流失;这样虽然能够覆盖更…