一、tensorflow的数据类型汇总&变量的创建,初始化等&占位符创建以及完善

Constants as Sequences

tf.lin_space(start,stop,num,name=None)

TensorFlow数据类型汇总

tf.float16半精度浮点数16-bit half-precision floating-point
tf.float32 单精度浮点数32-bit single-precision floating-point
tf.float64 双精度浮点数64-bit double-precison floating-point
tf.bfloat16 16位截断浮点数16-bit truncated floating-point
tf.complex6464位复数64-bit single-precision complex
tf.complex128128位复数128-bit double-precision complex
tf.int88位有符号整型8-bit signed integer
tf.uint88位无符号整型8-bit unsigned integer
tf.uint1616位无符号整型16-bit unsigned integer
tf.int1616位有符号整型16-bit signed integer
tf.int3232位有符号整型32-bit signed integer
tf.int6464位有符号整型64-bit signed integer
tf.bool布尔型Boolean
tf.string字符串型,每一个张量元素都是一个字节数组 String
tf.qint8用于量化Ops的8位有符号整型Quantized 8-bit signed integer
tf.uqint8用于量化Ops的8位无符号整型Quantized 8-bit unsigned integer
tf.qint16Quantized 16-bit signed integer
tf.uqint16Quantized 16-bit unsigned integer
tf.qint32Quantized 32-bit signed integer
tf.resourceHandle to a mutable resource

变量(tf.Variable)

要多使用tf.Variable而不是tf.constant。因为当常量很多的时候,导入图就会开销很大。所以只在基本类型中使用常量。

变量的创建

变量的创建可以使用下面两种方式:
使用tf.Variable创建,例如

s = tf.Variable(2, name="scalar") 
m = tf.Variable([[0, 1], [2, 3]], name="matrix") 
W = tf.Variable(tf.zeros([784,10]))

使用tf.get_variable创建,例如

s = tf.get_variable("scalar", initializer=tf.constant(2)) 
m = tf.get_variable("matrix", initializer=tf.constant([[0, 1], [2, 3]]))
W = tf.get_variable("big_matrix", shape=(784, 10), initializer=tf.zeros_initializer())

tf.Variable和tf.get_variable的定义分别是下面:


tf.Variable(initial_value=None, trainable=True, collections=None, validate_shape=True, caching_device=None, name=None, variable_def=None, dtype=None, expected_shape=None, import_scope=None)
tf.get_variable(name, shape=None, dtype=None, initializer=None, regularizer=None, trainable=True, collections=None, caching_device=None, partitioner=None, validate_shape=True, custom_getter=None

这两种创建变量的方式都能得到一个variable对象,而该变量具有好几种ops,比如创建了变量x=tf.Variable(…),那么具有以下的ops:x.initializer(初始化)x.value()(read op)x.assign(…)(写入)opx.assign_add(…)(加)
所以可以看出:tf.constant是一个op,而tf.Variable是具有很多op的一个类。

变量必须初始化

变量在使用之前必须初始化,而需要注意的是,初始化操作(initializer)也是一个Op,必须在会话(session)中执行。
一次初始化所有的变量:

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())

只是初始化一个变量的时候,可以使用initializer

with tf.Session() as sess:
sess.run(d.initializer)
d是定义好的一个变量。

tf.Variable.assign()

assign也是一个Op,需要在会话(session)中执行才能生效。

w=tf.Variable(10)
assign_op=w.assign(100)
with tf.Session() as sess:
    sess.run(w.initializer)
    sess.run(assign_op)
    print(w.eval())

assign_add() &assign_sub()分别对变量进行加和减运算。

每一个会话session都会有一个复制的变量。

占位符tf.placeholder()

占位符类似于函数的“形参”,先定义好变量的形式,执行的时候再赋予具体的值。占位符并没有初始值,只是分配了必要的内存。使用占位符,可以在想执行计算的时候再完善数据。

tf.placeholder(dtype,shape=None,name=None)
shape张量的形状

下面是创建占位符,并完善占位符的例子:


# create a placeholder for a vector of 3 elements, type tf.float32
a = tf.placeholder(tf.float32, shape=[3])

b = tf.constant([5, 5, 5], tf.float32)

# use the placeholder as you would a constant or a variable
c = a + b  # short for tf.add(a, b)

with tf.Session() as sess:
    print(sess.run(c))          # >> InvalidArgumentError: a doesn’t an actual value

执行会报错,所以在执行前要完善占位符。完善占位符的办法如下所示:

with tf.Session() as sess:
    print(sess.run(c, feed_dict={a: [1, 2, 3]}))    # the tensor a is the key, not the string ‘a’

# >> [6, 7, 8]

或者省略掉feed_dict:

with tf.Session() as sess:
    print(sess.run(c, {a: [1, 2, 3]}))

feed_dict是一个字典,在字典中给出用到占位符的取值,feed_dict={key:value,key:value…}

lazy loading问题

每一步计算(computing)或者运行(running)用到的操作(op)最好都要单独定义,在会话中执行,否则会创建多余的节点,消耗内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值