Tensorlfow——变量

神经网络参数是神经网络实现分类或者回归问题中重要的部分。
在Tensorflow中,变量(tf.Variable)的作用就是保存和更新神经网络中的参数。和其他编程语言相似,Tensorflow中的变量也需要指定初始值。因为在神经网络中,给参数赋予随机初始值最为常见,所以一般也是用随机数给Tensorflow的变量初始化。
通过构造一个Variable类的实例在图中添加一个变量(variable),
Variable()这个构造函数需要初始值,这个初始值可以是一个任何类型任何形状的Tensor,初始值的形状和类型决定了这个变量的形状和类型。构造之后,这个变量的形状和类型就固定了,他的值可以通过assign()函数(或者assign类似的函数)来改变。如果你想要在之后改变变量的形状,你就需要assign()函数同时变量的validate_shape=False
device:这个变量的device
dtype:变量的元素类型
graph:存放变量的图
initial_value:这个变量的初始值
initializer :这个变量的初始化器
name:这个变脸的名字
**op:**The Operation of this variable.
tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)
random_normal: 正太分布随机数,均值mean,标准差stddev
这里写图片描述
这段代码调用了Tensorflow变量声明函数tf.Variable。在变量声明函数中给出了初始化这个变量的方法。Tensorflow中变量的初始值可以设置成随机数、常数、或者是通过其他变量的初始值计算得到。
在上面的样例中,tf.random_normal([2,3],stddev=2)会产生一个2X3的矩阵,矩阵的元素均值是0,标准差为2的随机数。tf,random_normal函数可以通过参数mean指定平均值,在没有指定时默认为0.通过满足正太分布的随机数来初始化神经网络的参数是一个非常常用的方法。除了正太分布Tensorflow还提供一些替他的随机数生成器。
这里写图片描述
Tensorflow也支持通过常数来初始化一个变量:
这里写图片描述

在神经网络中,偏置项(bias)同行会使用常数来设置初始值。
这里写图片描述
这段代码将会生成一个初始值全部为0,且长度为3的变量。除了使用随机数或者常数,Tensorflow也支持通过其他变量的初始值来初始化新的变量。
这里写图片描述
在Tensorflow中,一个变量的值在被使用之前,这个变量的初始化过程需要被明确地调用。

下列样例是如何通过变量实现神经网络的参数并实现前向传播的过程:
这里写图片描述
声明变量w1、w2后,可以通过w1和w2来定义神经网络的前向传播过程并得到中间结果a和最后答案y。定义了w1、w2、a和y的过程就是定义Tensorflow计算图中所有计算,为第一步。
这些被定义的计算在第一步中并不能真正运行。当需要运行这些计算并得到具体数字时,需要进入第二步。
第二步 声明一个会话(session)并通过会话计算结果,在上面样例中,当会话定义完成之后就可以开始真正运行定义好的计算而来。但是站在计算y之前,需要将所有用到的变量初始化。也就是说,虽然在变量定义的时候给出了初始化的方法,但是这个方法并没有被真正运行。所以在计算y之前,需要通过运行w1.initializer和w2.initializer给变量赋值。虽然直接调用每个变量的初始化过程是一个可行的方案,但是变量数目增多,或者变量之间存在依赖关系时,单个调用方案就比较麻烦了。为了解决这个问题,Tensorflow提供了一种更加便捷的方式来完成变量初始化的过程。就是tf.initialize_all_variables()函数
这里写图片描述
通过tf.initialize_all_variables()函数,就不需要将变量一个一个初始化了。这个函数也会自动处理变量之间的依赖关系。
Tensorflow的核心概念是tensor,所有数据都是通过tensor的形式来组织的。
在Tensorflow中变量的声明函数tf.Variable()是一个运算。这个运算的输出结果是一个张量,这个张量也就是本节中介绍的变量。所以变量只是一种特殊张量。
类似张量,维度(shape)和类型(type)也是变量最重要的两个属性,变量的类型是不可改变的。一个变量在构建后,它的类型就不可改变了。不同类型之间不可进行运算。

维度是变量的另一个属性,和类型不大一样的是,维度在程序运行是可以改变的,但是需要设置参数validate_shape=False
这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值