【Tensorflow_DL_Note4】Tensorflow中的常量、变量和数据类型的结构

6人阅读 评论(0) 收藏 举报
分类:

一 Tensorflow数据模型---张量

       Tensorflow用【张量:Tensor】这种数据结构来表示所有的数据,我们可以将一个张量想象成一个n维的数组或列表。而一个张量有一个【静态类型】和【动态类型】的【维数】,Tensor可以在图中的节点Node之间流通。

      因此,基于这种特殊的数据和处理方式,Tensorflow中的数据类型也会因此而随之改变,常规的数据类型并不适合Tensorflow框架的使用。Tensorflow本身定义了一套特殊的函数,能够根据需要将不同的量设置成所需要的形式。

二 Tensor:张量的概念

       从Tensorflow的名字就可以看出Tensor:张量在Tensorflow这个【编程系统】中是一个非常重要的概念。在Tensorflow的程序中,所有的数据都是通过Tensor的形式来表示。

      【1】从功能上看,Tensor可以被简单的理解为【多维数组】,其中零阶Tensor表示标量scalar,也就是一个数;一阶张量为向量(vector),也就是一个一维数组;n阶Tensor可以理解为一个n维数组。但是,Tensor在Tensorflow中的实现,并不是直接采用数组的形式,它只是对Tensorflow运算结果的【引用,C++中的引用,也就是说,这个Tensor对应的并不是一个真正的内存  空间,而是另一个内存空间的别名,稍微有点类似指针的意思】。也就是说,Tensorflow在张量Tensor中,并没有保存真正的数据,因为Tensor是一个引用,而不是一个变量,系统并没有为Tensor开辟真正可以存储数据的内存空间。Tensor保存的是如何得到这些数据的计算过程。还是以【向量加法】为例,当运行代码的时候,并不会得到加法的结果,而会得到对结果的一个引用。

#coding=UTF-8
#========================================================================================================
#文件说明:
#       Tensorflow的【常量】、【变量】和【数据类型】
#开发环境:
#       Win10+Tensorflow+OpenCv_python3.4+PyCharm5.0.3+Python3.5
#时间地点:
#       陕西师范大学.文津楼  2018.4.17
#作    者:
#       马卫飞
#========================================================================================================
import tensorflow as tf
a = tf.constant([1.0,2.0],name="a")
b = tf.constant([2.0,3.0],name="b")

result = tf.add(a,b,name="add")
print(result)

三 Tensorflow中的常量、变量和占位符

1 Tensorflow中的[常量]的创建-----tf.constant()

#========================================================================================================
#【1】首先是,对Tensorflow包的导入
#【2】这里将Tensorflow包导入到系统,这样便可以使得在后续的编程过程中,直接使用现成的Tensorflow包,为了便于使用,将其重
#    新命名为tf
import tensorflow as tf
#【1】Tensorflow中【常量】的【创建方法】如下所示,其中‘Hello Tensrflow’是常量的初始值;tf.string是常量类型,在平时编
#     写的过程中可以省略
hello = tf.constant('Hello Tensorflow!',dtype=tf.string)
#【2】这里创建了一个以【常数】为底的初始值,省略了tf.int的常量类型
a     = tf.constant(1)

2 Tensorflow中的[变量]的创建-----tf.Variable()

    在深度学习框架Tensorflow中,变量(tf.Variable)的作用就是【保存】和【更新】神经网络的【参数】。和其他编程语言类似,Tensorflow中的Variabel也需要指定初始化值。因为,在神经网络中,给参数赋予初始值最为常见,所以,一般也使用随机数给Tensorflow中的变量初始化。

    首先,我们看一下Tensorflow中变量的创建,此块,我们是调用了Tensorflow中变量的声明函数tf.Variable()来创建的变量,如下所示:

#========================================================================================================
#文件说明:
#       Tensorflow中【变量】的创建
#========================================================================================================
import tensorflow as tf
a = tf.variable(1.0,dtype=tf.float32)
b = tf.Variable(1.0,dtype=tf.float32)

    然后,我们看一下,神经网络中,参数的定义和参数的初始化方法,如下所示:

#========================================================================================================
#模块说明:
#       【1】此块也是调用了Tensorflow中【变量的声明函数】tf.Variable,在声明函数中,给出了初始化这个变量的方法。
#       【2】Tensorflow中,变量的初始化值可以设置成【随机数】、【常数】或者是通过其他变量的初始值计算得到的。
#       【3】在下面的程序中,tf.random_normal([2,3],stddev=2)函数会产生一个2*3的矩阵,矩阵中的元素是均值为0,标准
#           差为2的随机数
#       【4】tf.random_normal函数可以通过参数mean来指定平均值,在没有指定时,默认为0.通过满足【正态分布】的【随机数】
#           来初始化神经网络中的参数是一个非常常用的方法。
#       【5】除了正太分布的随机数,Tensorflow还提供了一些其他的随机数生成器。
#              [1]tf.random_normal-----------正太分布----------平均值、标准差、取值类型
#              [2]tf.random_uniform----------平均分布----------最小,最大取值,取值类型
#              [3]tf.random_gamma------------Gamma分布---------形状参数alpha、尺度参数beta、取值类型
#========================================================================================================
import tensorflow as tf
weights = tf.Variable(tf.random_normal([2,3],stddev=2))
#========================================================================================================
#       【6】Tensorflow也支持通过【常数】来初始化一个变量。下面给出了Tensorflow中常数/常量的生成函数,如下所示:
#              [1]tf.zeros---------产生全0的数组--------tf.zeros([2,3],int32)
#              [2]tf.ones----------产生全1的数组--------tf.ones([2,3],int32)
#              [3]tf.fill----------产生一个全部为指定数字的数组----tf.fill([2,3],9)
#              [4]tf.constant------产生一个给定值得常量
#       【7】在神经网络中,偏置项bias通常会使用【常数】来设置初始化,下面给出一个代码的样例:
#========================================================================================================
biases = tf.Variable(tf.zeros([3]))
#========================================================================================================
#       【8】这段代码将会生成一个初始值全为0,且长度为3的变量
#       【9】除了使用【随机数】和【常数】,Tensorflow也支持通过其他的变量来初始化新的变量。如下代码所示:
#========================================================================================================
w2 = tf.Variable(weights.initialized_value())          #[1]使用weights变量的值初始化w2,但必须借助这个函数才可以
w3 = tf.Variable(weights.initialized_value()*2.0)
#========================================================================================================
#       【10】在上面的代码中,w2的初始值被设置成了与weights变量相同;w3的初始值被设置成了weights的两倍
#       【11】在Tensorflow中,一个变量的值在被使用之前,这个变量的初始化过程需要被明确的调用
#========================================================================================================

3 Tensorflow中的[占位符]的创建-----tf.placeholder

#========================================================================================================
#文件说明:
#       Tensorflow中【占位符】
#详细说明:
#       【1】除了一般框架中常见的【数据常量】和【数据变量】外,Tensorflow还存在另外一种特殊的【数据类型】,【占位符】,
#           placeholder;因为Tensorflow特殊的【数据计算】和【处理形式】,图进行计算的时候,可以从外界传入数值。而
#           Tensorflow并不能直接对传入的数据进行处理,因此,使用placeholder保留一个数据的位置,之后可以在Tensorflow
#           会话运行的时候进行赋值。
#       【2】tf.placeholder是占位符的函数,其中的参数是传入的数据类型,这里可以看到,当定义一个参数是tf.float32时,
#           传入的参数也必须是float32类型,如果传入其他类型的参数,系统就会报错。
#       【3】如下面的程序所示,input1和input2是2个int类型的占位符,此时,数据并不能直接发生改变,而是在会话进行的过程
#           中,不停的填入数据集中进行数据的处理。
#       【4】这块有个和有意思的例子,我们可以将这一过程想象成马克沁重机枪,机枪平时里面不存储弹药,只有在开火的时候,才
#           源源不断的维机枪送入子弹。
#       【5】同理,占位符placeholder平时只是作为一个空的Tensor在Tensorflow的图中构成一个边,只有当图完全启动后,才
#           有真实的数据被填入和计算。
#Tensorflow中几种常用的函数:
#       【1】tf.add(x,y,name=None)              求和
#       【2】tf.sub(x,y,name=None)              减法
#       【3】tf.mul(x,y,name=None)              乘法
#       【4】tf.div(x,y,name=None)              除法
#       【5】tf.mod(x,y,name=None)              求模
#       【6】tf.abs(x,name=None)                求绝对值
#       【7】tf.neg(x,name=None)                求负
#========================================================================================================
import tensorflow as tf

input1 = tf.placeholder(tf.int32)
input2 = tf.placeholder(tf.int32)

output = tf.add(input1,input2)

sess   = tf.Session()

print(sess.run(output,feed_dict={input1:[1],input2:[2]}))

查看评论

tensorflow中常量(constant)、变量(Variable)、占位符(placeholder)和张量类型转换reshape()

常量 constant tf.constant()函数定义: def constant(value, dtype=None, shape=None, name="Const", v...
  • dcrmg
  • dcrmg
  • 2018-01-09 21:52:33
  • 740

tensorflow: 如何定义常量tensor与变量tensor

Refence:  《Tensorflow machine learning cookbook》 : Declaring Tensors Packt.TensorFlow.Machine.L...
  • vagrantabc2017
  • vagrantabc2017
  • 2017-09-22 13:57:20
  • 793

Tensorflow学习笔记——张量、图、常量、变量(一)

1 张量和图 TensorFlow是一种采用数据流图(data flow graphs),用于数值计算的开源软件库。其中 Tensor 代表传递的数据为张量(多维数组),Flow 代表使用计算图进行...
  • m0_37324740
  • m0_37324740
  • 2017-09-02 20:36:32
  • 1470

TensorFlow学习(二):变量常量类型

更新时间:2017.2.27 tensorflow 1.0出来了,API和以前有了一些不一样,所以这里把把之前的代码迁移到新的上面去。 格式有问题,慢慢调….一.概览还记的上节TensorFlow...
  • xierhacker
  • xierhacker
  • 2016-11-13 21:03:52
  • 36607

tensorflow API简单整理(一、常量与变量基础)

Tensorflow Python API简单整理 google 对tensorflow的教程里面,从机器学习的角度进行了一步步的讲解,但是我自己在编写机器学习代码的时候,经常找不到相应的api。故我...
  • shandai7054
  • shandai7054
  • 2017-07-12 23:03:31
  • 1367

java语言基础

  • 2011年12月06日 19:54
  • 1.38MB
  • 下载

TensorFlow常量&随机量&变量

一、 tf.constant()  ---  常量 constant( value, dtype=None, shape=None, name='Const', ...
  • xihuandiannao
  • xihuandiannao
  • 2017-06-29 17:53:17
  • 347

数据类型——变量常量和声明与定义

在C的世界里,不同代码“国度”以.c文件为国界分隔开来,在单个国家里有不同函数占山为王,每个C程序世界里只有一个君主(MAIN),main通过下传指令(参数),调用各种军阀(函数),来掌控。 某军阀(...
  • qq_27397357
  • qq_27397357
  • 2016-11-01 14:21:46
  • 263

VB语言基础

  • 2012年11月23日 16:31
  • 115KB
  • 下载

Swift常量与变量、类型转换

/** 定义常量与变量:let/var let 代表定义一个常量 var 代表定义一个变量 Swift中定义常量和变量不需要写数据类型,编译器会根据数据后面的真是类型自动推导 Swift开发技巧:在做...
  • qq_31683103
  • qq_31683103
  • 2016-04-22 22:18:40
  • 244
    个人资料
    持之以恒
    等级:
    访问量: 50万+
    积分: 7029
    排名: 4074
    最新评论