TensorFlow笔记(二):TensorFlow常量、变量和占位符


TensorFlow中用张量(Tensor)来表示所有的数据结构。张量,可以理解为一个n维矩阵,所有类型的数据都是通过张量来表示的。

本文所用的TensorFlow版本为1.15,以下资料参考自TensorFlow官方API

常量

常量与其他编程语言中的一样,是不可改变的张量。

tf.constant()

tf.constant(
    value,
    dtype=None,
    shape=None,
    name='Const',
    verify_shape=False
)
  • value
    常量的值,使用时必须指定。
  • dtype
    常量类型,默认为未指定,当未指定时,从value自动推断。如果dtype指定类型,则将value强制转换为dtype。
  • shape
    常量的形状,该参数是可选的。如果存在,将指定常量的尺寸。如果不存在,则使用value的形状。value在指定时,如果为列表,长度必须小于或等于shape所含的元素数量。如果列表长度小于指定的shape元素数量,则列表中的最后一个元素将用于填充其余的条目。
    tensor = tf.constant([1, 2, 3, 4],shape = [2,3]) => [[1,2,3]
    												  	  [4,4,4]]
    
  • name
    为常量定义名称,默认为Const。
  • verify_shape
    默认值为False,如果值为True时,在定义常量时会自动检测value和shape维度是否相同,不同则报错,例如value定义为1,而shape定义为一行两列的矩阵[1,2],那么肯定会报错。

变量

当一个量在会话中的值需要更新时,使用变量来表示。例如,在神经网络中,权重需要在训练期间更新,可以通过将权重声明为变量来实现。变量在使用前需要被显示初始化。

tf.Variable类

TensorFlow中的变量使用Variable类来保存,使用时用initial_value参数指定初始化函数,name参数指定变量名。同时,支持用常量函数对变量进行初始化。

#定义一个变量,该变量大小为[1],值取自(-1.0,1.0)均匀分布
Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0))
#定义一个变量,该变量大小为[1],值均为0
biases = tf.Variable(tf.zeros([1]))

变量与常量有所不同,变量只指定了生成的方法,但是在运行之前还没有进行真正的初始化,所以对变量都应该进行初始化操作。

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init) 

tf.get_variable()

tf.get_variable() 函数也用于生成变量,相比于 tf.Variable 类,该函数多了对变量名进行检查的过程,该函数不允许在同一个变量上下文中出现同名变量。在使用 tf.Variable 类创建同名变量时,生成函数会自动修正变量的名称,而 tf.get_variable() 函数报错。

w_1 = tf.Variable(1,name="w_1")
w_2 = tf.Variable(1,name="w_1")
print (w_1.name)
print (w_2.name)
#输出
#w_1:0
#w_1_1:0
import tensorflow as tf

w_1 = tf.get_variable(name="w_1",initializer=1)
w_2 = tf.get_variable(name="w_1",initializer=2)
print (w_1.name)
print (w_2.name)
#ValueError:Variable w_1 already exists, disallowed.

在使用tf.get_variable()时,通常要指定初始化类initializer参数才能生成不同分布的数据。

初始化类数据
tf.constant_initizlizer使用常量初始化
tf.random_normal_initializer正态分布初始化
tf.random_uniform_initializer均匀分布初始化
tf.zeros_initializer全0初始化
tf.ones_initializer全1初始化

占位符

用于将值输入 TensorFlow 图中。它们可以和 feed_dict 一起使用来输入数据。在训练神经网络时,它们通常用于提供新的训练样本。在会话中运行计算图时,可以为占位符赋值。这样在构建一个计算图时不需要真正地输入数据。需要注意的是,占位符不包含任何数据,因此不需要初始化它们。

tf.placeholder(dtype,shape=None,name=None)

占位符在使用时,使用feed_dict来赋值,其格式为字典型。

import tensorflow as tf

x = tf.placeholder(tf.float32)
y = 2*x
data = tf.random_uniform([1,5],10)
with tf.Session() as sess:
    x_data = sess.run(data)
    print(sess.run(y, feed_dict= {x:x_data}))

输出结果为

[[10.778231  9.779522 15.694902 16.73773   5.340846]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值