TensorFlow学习过程记录 (二) -- 基本使用(3) -- 变量

介绍变量之前,先对’tensor’这个单词做出解释:

3. tensor

文档中是这样说明的:

TensorFlow 程序使用 tensor 数据结构来代表所有的数据, 计算图中, 操作间传递的数据都是 tensor.
你可以把 TensorFlow tensor 看作是一个 n 维的数组或列表. 一个 tensor 包含一个静态类型 rank, 和 一个 shape.

4. 变量

变量维护图执行过程中的状态信息.
文档中给出的代码:

# coding=utf-8
# 使用变量实现一个简单的计数器

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

# 创建一个变量, 初始化为标量 0.
state = tf.Variable(0, name="counter")

# 创建一个 op, 其作用是使 state 增加 1

one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)

# 启动图后, 变量必须先经过`初始化` (init) op 初始化,
# 首先必须增加一个`初始化` op 到图中.
init_op = tf.initialize_all_variables()

# 启动图, 运行 op
with tf.Session() as sess:
  # 运行 'init' op
  sess.run(init_op)
  # 打印 'state' 的初始值
  print(sess.run(state))
  # 运行 op, 更新 'state', 并打印 'state'
  for _ in range(3):
    sess.run(update)
    print(sess.run(state))

得到运行结果
这里写图片描述

注意代码中使用了state = tf.Variable(0, name="counter")来创建一个初始化为0的变量,Variable的签名为:

 def __init__(self,
               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,
               constraint=None):

用于创建一个值为initial_value的变量。
将新变量添加到“collections”中列出的图集合中,默认值为[GracKy.GualAlxValue]。
如果trainable是True变量也被添加到图表集合“GrimeKest.Trimable变量”中。
构造器创建一个variable op和一个assignop来将变量设置为其初始值。
参数:

initial_value trainable
一个Tensor,或者一个课转变为Tensor的python对象,它是变量的初始值,除非validate_shape被设为False,否则初始值必须指定一个形状(shape)。被调用时也可不带参数,当调用时返回初始值。在这种情况下,必须指定“dType”。 请注意,在使用之前,来自init_ops.py 的初始化函数必须先绑定到一个shape。 如果为True,也会将该变量添加到图表集合GraphKeys.TRAINABLE_VARIABLES中,该集合被用作默认的变量列表,通过Optimizer类使用。
collections validate_shape
图表几个的键列表,新的变量被添加到该集合。默认:[GraphKeys.GLOBAL_VARIABLES] 如果为FALSE,则允许该变量用一个未知的shape初始化。默认为True,表示变量的shape必须明确。

还有几个属性,等以后遇到了再说明吧。
后面代码还使用了一个update = tf.assign(state, new_value)op。
asssign的签名为:

def assign(ref, value, validate_shape=None, use_locking=None, name=None):

用于将value赋值给ref。

然后需要一个初始化op :

init_op = tf.initialize_all_variables()

对于该方法的一个问题,下一节会做出说明
返回一个初始化全局变量的op

扫描二维码关注公众号,回复: 161799 查看本文章

代码中 assign() 操作是图所描绘的表达式的一部分, 正如 add() 操作一样. 所以在调用 run() 执行表达式之前, 它并不会真正执行赋值操作.
通常会将一个统计模型中的参数表示为一组变量. 例如, 你可以将一个神经网络的权重作为某个变量存储在一个 tensor 中. 在训练过程中, 通过重复运行训练图, 更新这个 tensor.

猜你喜欢

转载自blog.csdn.net/weixin_35737303/article/details/80215370
今日推荐