学习 Archives - Tobycc
152
archive,category,category-study,category-152,ajax_fade,page_not_loaded,,qode-theme-ver-13.5,qode-theme-bridge,disabled_footer_bottom,wpb-js-composer js-comp-ver-5.4.5,vc_responsive

学习

std::queue在pop之后不会释放内存,在执行swap或queue析构时才会释放被pop掉的元素占用的内存 或者定义成shared_ptr的queue可以直接在pop时释放内存 [cc lang="c++"] std::queue [/cc] 以下面的代码为例: [cc lang="c++"] #include #include #include int main() { std::queue the_queue; uint64_t total_size = 5000000000; uint64_t step_size = total_size / 10; for(uint64_t i = 0; i < total_size; i++) { ...

Tensorflow简介 Tensorflow的定位 TensorFlow是一个采用数据流图,用于数值计算的开源软件库。被开发用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。 通用计算框架、算法引擎,提供了多种机器学习的基础计算单元op(operator,如自动反向传播求解梯度、卷积、LSTM),用户可以方便的设计实现神经网络结构。 低于深度学习框架(如Caffe、Paddle),用户除了配置网络结构参数外,需要自己使用计算单元op实现具体的算法,可自定义计算逻辑,算法实现的自由度更高。 高于编程框架(如ELF、目前的Hippo),在计算引擎上层封装了包含多种计算单元op的高阶机器学习库,用户主要关注算法逻辑,而不是基本计算单元(ELF的map, Hippo的node)的实现 类似数学分析领域的MatLab,提供强大的运算接口,上层的应用怎么实现看用户编程。 「hadoop是大数据时代的infrastructure, 而tensorflow会是人工智能时代的infrastructure」 Tensorflow的发展和现状 Tensorflow是由Jeff Dean领头的Google Brain团队基于Google内部第一代深度学习系统DistBelief改进而来的通用计算框架。 DistBelief是Google2011年开发的内部深度学习工具,在内部取得了巨大成功,在Google的图片搜索和语音识别业务上都有突破性的进展(开创了图片搜索功能,语音识别错误率降低了25%,相当于前十年的总和)。 2015年11月发布基于Apache2.0开源协议的Tensorflow,去除了DistBelif对Google内部的系统依赖,计算模型更加通用、计算速度更快、支持计算平台更多、支持深度学习算法更广,系统稳定性更高。 2016年5月发布专门为机器学习和Tensorflow定制的张量处理单元TPU,可编程的AI加速器,提供高吞吐量的低精度计算,面向使用或运行模型而不是训练模型。 2017年2月发布大版本Tensorflow 1.0,更快、更灵活的新特性,Keras正式成为Tensorflow默认API,提供高级别的神经网络框架API。 Tensorflow在Google内部得到广泛的应用,在排序系统的上千种排序算法中,基于Tensorflow实现的RankBrain是第三重要的排序算法。包括网页搜索在内,Tensorflow已经成功应用到Google内部语音搜索、广告、电商、图片、翻译、YouTube、街景图等各款产品中。Deepmind在尝试半年后正式宣布之后所有的研究都将使用Tensorflow作为实现深度学习算法的工具。 包括Uber、Snapchat、Twitter、京东、小米国内外多家科技公司都在使用Tensorflow,Google I/O 2016大会上提到已经有1500个GitHub代码库在使用Tensorflow,其中只有5个是Google官方提供的。 各种开源深度学习框架和工具层出不穷,各有优点。Tensorflow坐拥巨头Google的全力支持,以及自身设计神经网络结构的代码的简洁度、分布式深度学习算法的执行效率、部署的便利性等亮点,在开源社区活跃度上占有绝对优势,大有一统江湖之势。 左图为不同深度学习工具社区流行度指标比较, 截止到2016年11月github的star和fork数量;右图不同深度学习工具社区参与度指标比较,2016年11月单月讨论和提交代码数量。tensorflow各个指标都远超其他,并且领先优势还在扩大。 Tensorflow使用 编程模型 Tensorflow是基于计算图Graph的计算框架,要求用户将自己需要实现的机器学习算法都实现为数据以张量Tensor的形式在多个计算单元Operator之间计算流动的过程,即张量的数据流Tensor-Flow。 主要概念 张量Tensor: 基本数据单位,Tensorflow里所有的数据皆为Tensor。 Tensor形式为多维数组,在Tensorflow Python API里以Numpy.NDArray的形式。 常用Tensor:0阶Tensor为标量,1阶Tensor为向量、数组,2阶Tensor为矩阵 Tensor只是对数据结果的引用,没有真正的保存数据,保存的是如何得到这些数据的计算过程。在Session中运行时才能得到真正的数据。 计算单元Operator:计算图中的每一个节点,单个计算过程;每个计算单元的输入可以是0或多个Tensor,输出可以是0或多个Tensor。 计算图Graph:由多个计算单元Operator通过边连接形成的图,计算单元之间的边表示了计算之间的Tensor数据传递关系;特殊的边控制依赖controll dependencies,控制计算节点之间的依赖关系。 变量Variable:需要保存的参数状态。而参数是在图中有其固定的位置的,不能像普通数据那样正常流动。因而,Tensroflow中将Variables实现为一个特殊的算子,该算子会返回它所保存的可变tensor的句柄。 会话Session:拥有并管理Tensorflow程序运行时的所有资源,用户定义完的计算图Graph必须再Session中执行才能得到真正的计算结果;可以配置并行线程数、CPU/GPU分配策略等运行参数。 占位符Placeholder、数据Feed/Fetch:数据占位符Placeholder可以为计算单元op预留指定格式的Tensor输入,在Session运行中使用Feed机制使用新的指定格式Tensor临时替换作为输入,使用Fetch机制可以取回Session运行中的Tensor结果。 MNIST DNN Demo Tensorflow游乐场 网络结构: 模型结果: W1、B1、W2、B2四个tensor W1.shape = [784, 4] ,B1.shape = [4] ,  W2.shape = [4, 10] ,  B2.shape = [10] 计算图模型: 前向传播: mul1 = X * W1 add1 = mul1 + b1 tanh1 = tanh(add1) mul2 = tanh1 * W2 add2 = mul2 + b2 tanh2 =...