tensor

TENSORFLOW:GRAPH 和 SESSION续

匿名 (未验证) 提交于 2019-12-02 23:42:01
用tf.Session.run去运行opertions tf.Session.run方法是tensorflow里去执行一个opertion或者对tensor求值的主要方式。你可以把一个或者多个opertaion或者tensor传递给session.run去执行。TensorFlow会执行这些operation和所有这个operation依赖的计算去得到结果。 session.run需要你指定一个fetch列表。一个fetch可以是tensor,operation,类tensor对象(variable)。这个fetch列表决定了session.run要返回的值。这些fetch决定了graph里哪些subgraph里需要被执行来得到结果。这个subgraph是fetch里指定的operation和这个operation依赖的operations。下边的例子演示了这一点: tf.Session.run会接受一个可选的feeds dictionary。主要是用来完成从一个tensor(主要是placeholder)到值(主要是python的标量,list,ndarray)的映射。在执行时用值来替换tensor。比如: tf.Session.run也接受可选的options参数来指定参数。还有一个可选的run_metatdata 参数可以让你收集执行的参数

tf.constant

匿名 (未验证) 提交于 2019-12-02 23:42:01
创建一个常数张量。得到的张量由类型为dtype的值填充,由参数值和(可选的)形状指定。参数值可以是常量值,也可以是类型为dtype的值列表。如果value是一个列表,那么列表的长度必须小于或等于shape参数所暗示的元素数量(如果指定)。如果列表长度小于按形状指定的元素数量,则列表中的最后一个元素将用于填充其余条目。参数形状是可选的。如果存在,它指定得到的张量的维数。如果不存在,则使用值的形状。如果未指定参数dtype,则从值的类型推断类型。 例: # Constant 1-D Tensor populated with value list. tensor = tf.constant([1, 2, 3, 4, 5, 6, 7]) => [1 2 3 4 5 6 7] # Constant 2-D tensor populated with scalar value -1. tensor = tf.constant(-1.0, shape=[2, 3]) => [[-1. -1. -1.] [-1. -1. -1.]] 返回值: 一个恒定的张量。 返回值: TypeError : if shape is incorrectly specified or unsupported. https://tensorflow.google.cn/versions/r1.8/api_docs

sess.run()

匿名 (未验证) 提交于 2019-12-02 23:41:02
函数: 当构建完图后,需要在一个session会话中启动图,第一步是创建一个Session对象。 在python语言中,返回的tensor是numpy ndarray对象。 import tensorflow as tf #创建一个变量。在默认的图中创建节点,这个节点是一个变量,命名为“counter” state = tf.Variable(0, name="counter") #创建一个常量 one = tf.constant(1) #创建一个op。对常量与变量进行简单的加法操作,这点需要说明的是: 在TensoorFlow中, #所有的操作op和变量都视为节点,tf.add() 的意思就是在tf的默认图中添加一个op,这个op是用来做加法操作的。 new_value = tf.add(state,one) #赋值操作。将new_value的值赋值给update变量 update = tf.assign(state,new_value) #此处用于初始化变量。但是这句话仍然不会立即执行。需要通过sess来将数据流动起来 。如果有Variable,一定需要写这句话 init = tf.initialize_all_variables() #启动图,运行op with tf.Session() as sess: #对变量进行初始化,真正的赋值操作 sess.run(init)

TENSORFLOW:VARIABLES

匿名 (未验证) 提交于 2019-12-02 23:41:02
Variables TensorFlow里的variable是表示你程序操作的持续共享的状态的最好的方式。 变量是通过tf.Variable类操作的。一个tf.Variable表示一个tensor的值是可以通过操作来改变的。和tf.Tensor不同,tf.Variable是存在于单次session.run调用的context之外的。 在内部,一个tf.Variable存储着一个持久的tensor,特定的操作允许你读取或者修改这个tensor的值。而且这些修改是跨session的。所以多个worker可以看到同样值的tf.Variable. 创建一个Variable 最好的创建一个variable的办法是通过调用tf.get_variable方法。这个方法需要你设定变量的名字。别人可以通过这个名字来访问这个variable。同时这个名字还会在checkpointing和exporting model的时候给变量的值命名。tf.get_variable同时也允许你重用之前定义的同名变量。这样让你在定义模型时重用一些layer。 通过tf.get_variable创建一个变量的时候,只要简单的提供名字和shape 上边的代码创建了一个名叫my_variable的变量,它有3个维度,shape是[1,2,3].这个值默认是tf.float32类型的. 它的初始值会被tf.glorot

TENSORFLOW中基本概念的理解

匿名 (未验证) 提交于 2019-12-02 23:41:02
TensorFlow 里的一些概念并不straightforward。在这里我把自己经过这一段时间学习的一些理解写下来,希望能帮到其他人。 TensorFlow是一个机器学习框架,它的程序结构当然也都是为深度学习准备的。我们先来看一下一个机器学习的过程是怎样的: 问题 用户要解决一个多分类问题。以一个普通神经网络为例,用户有100条样本记录,每个记录里有8个feature,f1-f8。最终要把一个样本分为3个分类中的一个c1-c3。 网络设计 首先我们要做的就是设计这个网络,比如我们的输入层有8个神经元,一个隐藏层,有16个神经元,一个输出层有3个神经元。 输出层我们用给一个softmax来做分类。 定义loss函数 我们用交叉熵函数来定义loss 减少loss 我们通过loss值来计算梯度,并进行反向传播 多次迭代 正向传播->计算loss->减少loss(反向传播)->正向传播->计算loss->减少loss(反向传播)->… 这样经过多次迭代后loss越来越小。模型越来越精确。 下边我们来看TensorFlow是怎么帮助我们完成上边工作的。我们在进行正向传播是,计算的数字其实来自两个部分, 1. 输入的数据,以及每层的输出。他们每次迭代都是独立的。 2. 网络的参数,每次迭代他们都是在上次迭代的基础上根据梯度和学习率不断做修正的。 Variable

在TensorFlow中,Session.run 和Tensor.eval 有什么区别

匿名 (未验证) 提交于 2019-12-02 23:41:02
TensorFlow有两种方式来评估Graph(计算图)的一部分:对变量列表做 Session.run 或 Tensor.eval 。这两者有什么区别? 最佳解决思路 如果你有一个 Tensor t,调用 t.eval() 相当于调用 tf.get_default_session().run(t) 。 可以按如下方式将会话设置为默认会话: t = tf.constant(42.0) sess = tf.Session() with sess.as_default(): # or `with sess:` to close on exit assert sess is tf.get_default_session() assert t.eval() == sess.run(t) 最重要的区别是,可以使用 sess.run() 在相同的步骤中获取多个Tensor(张量)的值: t = tf.constant(42.0) u = tf.constant(37.0) tu = tf.mul(t, u) ut = tf.mul(u, t) with sess.as_default(): tu.eval() # runs one step ut.eval() # runs one step sess.run([tu, ut]) # evaluates both tensors in a

tensorflow tf.Variable()和tf.get_variable()详解

匿名 (未验证) 提交于 2019-12-02 23:41:02
一、tf.Variable() (1)参数说明 tf.Variable是一个Variable类。通过变量维持图graph的状态,以便在sess.run()中执行;可以用Variable类创建一个实例在图中增加变量; Args参数说明: initial_value:Tensor或可转换为Tensor的Python对象,它是Variable的初始值。除非validate_shape设置为False,否则初始值必须具有指定的形状。也可以是一个可调用的,没有参数,在调用时返回初始值。在这种情况下,必须指定dtype。 (请注意,init_ops.py中的初始化函数必须首先绑定到形状才能在此处使用。) trainable:如果为True,则会默认将变量添加到图形集合GraphKeys.TRAINABLE_VARIABLES中。此集合用于优化器Optimizer类优化的的默认变量列表【可为optimizer指定其他的变量集合】,可就是要训练的变量列表。 collections:一个图graph集合列表的关键字。新变量将添加到这个集合中。默认为[GraphKeys.GLOBAL_VARIABLES]。也可自己指定其他的集合列表; validate_shape:如果为False,则允许使用未知形状的值初始化变量。如果为True,则默认为initial_value的形状必须已知。 caching

C++中调用Tensorflow的pb文件(二)

匿名 (未验证) 提交于 2019-12-02 23:32:01
在之前的 博文 中有讲到如何编译安装c++版的Tensorflow,并简单调用自己训练的pb文件。在本文中将进一步结合代码调用pb文件。之前经常使用google发布在github上基于tensorflow的object detection模块,在该模块中官方事先提供了一系列预训练模型,如下图所示,我们可以直接使用这些模型也可以针对自己的项目进行re-train操作并得到最终的pb文件。 接下来我们在C++中调用这些模型,之前在网上找了好久都没找到可用的事例代码,而且官方提供的API看着也是一脸懵(编程菜鸟),后来摸索了很久总结代码如下: #include <iostream> #include "tensorflow/cc/ops/const_op.h" #include "tensorflow/cc/ops/image_ops.h" #include "tensorflow/cc/ops/standard_ops.h" #include "tensorflow/core/framework/graph.pb.h" #include "tensorflow/core/framework/tensor.h" #include "tensorflow/core/graph/default_device.h" #include "tensorflow/core/graph/graph

TensorFlow中的通信机制――Rendezvous(二)gRPC传输

匿名 (未验证) 提交于 2019-12-02 23:06:17
背景 [作者: DeepLearningStack ,阿里巴巴算法工程师,开源TensorFlow Contributor] 本篇是TensorFlow通信机制系列的第二篇文章,主要梳理使用gRPC网络传输部分模块的结构和源码。如果读者对TensorFlow中Rendezvous部分的基本结构和原理还不是非常了解,那么建议先从 这篇文章 开始阅读。TensorFlow在最初被开源时还只是个单机的异构训练框架,在迭代到0.8版本开始正式支持多机分布式训练。与其他分布式训练框架不同,Google选用了开源项目gRPC作为TensorFlow的跨机通信协议作为支持。gRPC的编程和使用其实是相对复杂的,TensorFlow为了能让gRPC的调用更加平滑,在调用链封装和抽象上面做了较多工作,甚至有些工作例如创建和管理gRPC channel涉及到了GrpcSession模块。从个人角度来看,利用gRPC进行Tensor通信的过程已经足够丰富,所以我们只针对gRPC传输Tensor过程进行梳理,至于涉及到gRPC管理方面的内容会在另一篇介绍分布式Session创建和管理的文章中集中梳理。 跨进程通信过程 根据之前写博客的经验,直接介绍类图结构和源码部分可能会让人懵圈,还是先从逻辑上把通信过程梳理清楚更能做到深入浅出。其实对于不是非常了解分布式系统或大规模并发系统的读者而言

tensorflow-tf.concat

匿名 (未验证) 提交于 2019-12-02 23:03:14
tf.concat tf.concat( ) 按一维连接张量。 沿着维度轴连接张量值的列表。如果values[i].shape=[D0, D1, ... Daxis(i), ...Dn],则连接的结果具有形状如下: [D0, D1, ... Raxis, ...Dn] 在此 Raxis = sum(Daxis(i)) 也就是说,来自输入张量的数据沿着轴维度连接。 输入张量的维数必须匹配,除轴外的所有维度必须相等。 例如: [[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]] [[ 1 2 3 7 8 9] [ 4 5 6 10 11 12]] 在python中,axis可以为负值。负轴(axis)x被解释为从秩(rank)的末尾开始计数,即axis+rank(values)-Th维。 例如: #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Thu Sep 6 10:16:37 2018 @author: myhaspl """ import tensorflow as tf t1 = [[[1, 2], [2, 3]], [[4, 4], [5, 3]]] t2 = [[[7, 4], [8, 4]], [[2, 10], [15, 11]]] a=tf.concat([t1,